这是与完整示例的区别:-
//@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) 这里如果 Config 类使用 @configuration 注解,则 a() 方法和 b() 方法都将被调用一次。
2)这里如果 Config 类使用 @component 注释,则 b() 方法将被调用一次,但 a() 方法将被调用两次。
(2) 中的问题:- 因为我们已经注意到 @component 注释的问题。第二种配置 (2) 完全不正确,因为 spring 将创建 A 的单例 bean,但 B 将获得 A 的另一个实例,该实例不受 spring 上下文控制。
解决方案:- 我们可以在 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);
}
}