我已经声明了两个相同类类型的 bean。将它们初始化为@Lazy
. @Autowiring
其中一个 bean 也自动初始化了另一个 bean。我很惊讶看到这种行为。只是想知道更多关于机制的信息。
代码
//bean
public class HelloWorld {
public HelloWorld(String msg){
System.out.println( msg + ", " + this);
}
}
@Configuration
@Lazy
public class SpringAppContext {
@Bean(name="helloworld1")
public HelloWorld helloworld1(){
return new HelloWorld("helloworld1");
}
@Bean(name="helloworld2")
public HelloWorld helloworld2(){
return new HelloWorld("helloworld2");
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={SpringAppContext.class})
public class SpringBeanLazyLoadTest {
@Autowired
private HelloWorld helloworld2;
@Test // this test is lame but just trying out.
public void print(){
System.out.println("Autowired: " + helloworld2);
}
}
输出
helloworld2, my.entp.spring.HelloWorld@3a9bba
helloworld1, my.entp.spring.HelloWorld@163f7a1 // why was helloworld1 initialized?
Autowired: my.entp.spring.HelloWorld@3a9bba
如果您观察输出,您可能会注意到helloworld1
bean 在 is 时被helloworld2
初始化@Autowired
。
我通过删除进行了测试@Autowired
,它产生了预期的结果:没有初始化任何 bean。