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(){
        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();
    }
}

实例工厂实例化