这里与完整的例子的区别: -
//@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