這裏與完整的例子的區別: -
//@Configuration or @Component
public static class Config {
@Bean
public A a() {
return new A();
}
//**please see a() method called inside b() method**
@Bean
public B b() {
return new B(a());
}
}
1)在此,如果配置類註解爲@Configuration,比()方法和b()方法,兩者都將被稱爲一次。
2)在此,如果用@Component註釋的配置類,比()方法將被調用一次但 B()方法將被調用兩次。
問題在(2): - 因爲我們已經注意到了@compenent註解的問題。 這個第二個配置(2)完全不正確,因爲spring將創建A的單例bean,但是B將獲得另一個不在spring上下文控件中的A實例。
解決方案: - 我們可以在Config類中使用@autowired註解和@component註解。
@Component
public static class Config {
@Autowired
A a;
@Bean
public A a() {
return new A();
}
@Bean
public B b() {
return new B(a);
}
}
「注意,是樣B除了是b的行爲像X.注意,也表現得像X。」大。 – 2016-01-11 11:52:08