• SpringBean的实例化


    在Spring框架中,想使用Spring容器中的Bean,需要先实例化Bean

    SpringBean的实例化有3种方式

    构造方法实例化 (最常用)

    在Java配置类中,写一个构造方法,在这个构造方法中new一个Bean实例,
    然后在构造方法上添加注解@Bean(value="beanClass") ,这里的beanClass是Bean实例的名称,一般使用小驼峰命名。

    示例代码
    TestBean1.java

    package cn.lzh.kam.pojo;
    import lombok.Getter;
    import lombok.Setter;
    @Getter
    @Setter
    public class TestBean1 {
    private String msg;
    public TestBean1() {
    this.msg = "测试-构造方法实例化bean";
    }
    public TestBean1(String msg) {
    this.msg = msg;
    }
    }

    JavaCfg.java

    package cn.lzh.kam.cfg;
    import cn.lzh.kam.pojo.TestBean1;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    @Configuration
    public class JavaCfg {
    @Bean(value = "testBean1")
    public TestBean1 getTestBean1(){
    //手动new一个bean实例
    return new TestBean1();
    }
    }

    然后,业务代码中使用testBean1这个实例,2种方式
    第一种,利用context.getBean

    public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(KamApplication.class, args);
    TestBean1 testBean1 = (TestBean1) context.getBean("testBean1");
    System.err.println(testBean1.getMsg());
    }

    第二种,利用注解注入实例

    @Service
    public class LoginService {
    @Autowired
    @Qualifier("testBean1")
    private TestBean1 testBean1;
    }

    静态工厂实例化

    新建一个静态工厂类,用于实例化上面的TestBean1.java 。
    在这个静态工厂类中,要先通过静态变量方式手动new一个Bean实例,然后用createInstance静态方法renturn出这个实例;
    最后,在Java配置类中,写一个构造方法,在这个构造方法中调用刚刚的静态工厂的createInstance方法来返回Bean实例。

    示例代码
    BeanStaticFactory.java

    package cn.lzh.kam.pojo;
    public class BeanStaticFactory {
    private static TestBean1 tb2 = new TestBean1("调用静态工厂来实例化Bean");
    public static TestBean1 createInstance(){
    return tb2;
    }
    }

    JavaCfg.java

    package cn.lzh.kam.cfg;
    import cn.lzh.kam.pojo.BeanStaticFactory;
    import cn.lzh.kam.pojo.TestBean1;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    @Configuration
    public class JavaCfg {
    @Bean(value = "tb2")
    public TestBean1 getTb2(){
    //直接调用静态工厂的静态方法
    return BeanStaticFactory.createInstance();
    }
    }

    实例工厂实例化

    新建一个工厂类,该类中新建一个方法用来手动new出1个Bean实例并返回。
    然后,在Java配置类中,写一个构造方法,
    在这个构造方法中,要先new一个工厂类的实例,
    然后用调用实例工厂的 createTb3Instance 方法来返回Bean实例。

    示例代码
    BeanInstanceFactory.java

    package cn.lzh.kam.pojo;
    public class BeanInstanceFactory {
    public TestBean1 createTb3Instance(){
    return new TestBean1("调用实例工厂来实例化Bean");
    }
    }

    JavaCfg.java

    package cn.lzh.kam.cfg;
    import cn.lzh.kam.pojo.BeanInstanceFactory;
    import cn.lzh.kam.pojo.BeanStaticFactory;
    import cn.lzh.kam.pojo.TestBean1;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    @Configuration
    public class JavaCfg {
    @Bean(value = "tb3")
    public TestBean1 getTb3(){
    //要先实例化 工厂类
    BeanInstanceFactory bi = new BeanInstanceFactory();
    return bi.createTb3Instance();
    }
    }
  • 相关阅读:
    Golang爬虫入门指南
    Tensorflow源码编译
    云原生 | Docker - [Dockerfile]
    git用法
    分布式加/解密的敏感数据的保护方案的安全性证明及应用场景
    它让你1小时精通RabbitMQ消息队列、且能扛高并发
    Hive面试题
    4WRBA6EB15-2X/G24N9Z4/M比例换向阀控制器
    pycharm连接远程服务器进行调试
    微信小程序 - - - input和键盘一起上弹如何实现?
  • 原文地址:https://www.cnblogs.com/skyI/p/16609918.html