同じクラス タイプの 2 つの Bean を宣言しました。それらを に初期化しました@Lazy
。@Autowiring
それらの 1 つの 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
出力を観察すると、isのhelloworld1
ときに Bean が初期化されていることがわかります。helloworld2
@Autowired
削除@Autowired
してテストしたところ、期待どおりの結果が得られました。どの Bean も初期化されませんでした。