如果服务bean依赖于另一个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());
//}
}
答案 0 :(得分:5)
简短答案
没有区别,但是第一种方法更可取。
好答案
您不使用java.lang.Integer
实例,而是与由cglib生成并由Spring软件包org.springframework.cglib.proxy
支持的内存中子类进行隐式交互(具有类似{{3 }},Enhancer
等。
正如调试所揭示的那样,它们通常被称为MyConfig
之类的东西。
MethodProxy
开始初始化bean时,已经可以使用cglib代理了。代理的方法可以满足Spring的要求(例如,每次调用ClassName$$EnhancerBySpringCGLIB$$XXXXXXXX
方法都会返回相同的实例)。@Bean
可以声明Bean间的依赖关系。在第二种方法中,我们使用@Scope("singleton")
或some()
知道它将在运行时引用代理方法。
为什么我会推荐第一种方法?
您会立即看到Bean需要哪些依赖关系-它们都在签名中列出。