mem*_*und 2 java spring dependency-injection spring-bean spring-boot
如果服务bean依赖于另一个:将bean作为方法参数注入或直接从方法引用中获取是否有任何区别?
@Configuration
public class MyConfig {
@Bean
public SomeService some() {
return new SomeService();
}
@Bean
public AddService add(SomeService some) {
return new AddService(some);
}
//alternative:
//@Bean
//public AddService add() {
// return new AddService(some());
//}
}
Run Code Online (Sandbox Code Playgroud)
简短的回答
没有区别,但第一种方法更可取.
答案很长
你不要用工作MyConfig
实例,你含蓄与生成的内存子相互作用CGLIB和Spring的包支持org.springframework.cglib.proxy
(与像类Enhancer
,MethodProxy
等等).
由于调试可能会显示,通常会调用它们ClassName$$EnhancerBySpringCGLIB$$XXXXXXXX
或其他东西.
当BeanFactory
开始初始化bean时,它已经与cglib代理一起使用.构造代理的方法是为了满足Spring的要求(例如,@Bean
方法的每次调用都将返回相同的实例).@Scope("singleton")
它可以声明bean间依赖关系.在第二种方法中,我们使用some()
或this.some()
知道它将在运行时引用代理方法.
我为什么要推荐第一种方法?
您可以立即看到bean需要哪些依赖项 - 它们都列在签名中.
归档时间: |
|
查看次数: |
66 次 |
最近记录: |