在看别人代码的时候,发现一个问题,简单了个例子
@Configuration
public class MyConfig{
@Bean
public Test1 test1() {
return new Test1();
}
@Bean
public Test2 test2() {
Test2 test2 = new Test2();
test2.setTest1(test1())
return new Test2();
}
}
test2()方法上面的@Bean注解,表示将会创建一个名为test2的bean对象交给spring管理,该对象有一个属性,是通过test1()方法创建的,然后我就不明白了,test1()方法也被@Bean注解,创建一个名为test1的bean对象交给spring管理,那么这里再次调用test1()方法会不会有问题,思考的时候,灵光一现,spring通过@Bean创建的bean对象,默认是单例。Spring初始化的时候,通过test1()创建了一个单例对象,以后无论调用test1()方法多少次,创建的都是spring初始化时创建的对象。
但是如果在第一个Bean注解下通过@Scope注解,更改了作用域,那么test2方法中再调用test1方法,将会创建一个新的bean对象
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
--------------------------------分割线-------------------------------
springboot的@Bean注解配置一个bean,方法的形式参数是另外一个bean的时(依赖注入)