当我阅读和调试spring源代码时,我发现@configuration类由cglib代理和ConfigurationClassEnhancer类包装,我不理解设计的原因,谢谢
答案 0 :(得分:0)
处理如下情况。
这是因为@Configuartion类被代理并且包含 检查bean是否已在ApplicationContext中的逻辑
@Configuration
public class MyConfig{
@Bean
public MyDao1 Dao1(){
MyDao1 d1 = new MyDao1();
d1.setDataSource(datasource());
return d1;
}
@Bean
public MyDao2 Dao2(){
MyDao1 d2 = new MyDao2();
d2.setDataSource(datasource());
return d2;
}
@Bean
public Datasource datasource(){
DataSource ds = new DataSource();
return ds;
}
}
注意:@Component类也可以通过@Beans定义bean,但是上述情况肯定会引起问题,因为在这种情况下bean调用不会通过代理被拦截。