Java @Bean初始化-参数注入和直接方法访问之间的区别?
如果一个服务bean依赖于另一个:将该bean作为方法参数注入,或者直接从方法引用获取,两者之间有什么区别吗Java @Bean初始化-参数注入和直接方法访问之间的区别?,java,spring,spring-boot,dependency-injection,spring-bean,Java,Spring,Spring Boot,Dependency Injection,Spring Bean,如果一个服务bean依赖于另一个:将该bean作为方法参数注入,或者直接从方法引用获取,两者之间有什么区别吗 @Configuration public class MyConfig { @Bean public SomeService some() { return new SomeService(); } @Bean public AddService add(SomeService some) { return new AddServ
@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());
//}
}
简短回答 没有区别,但第一种方法更可取 长答案 您不使用
MyConfig
实例,而是隐式地与Spring包生成并支持的内存中子类(与类等)交互
正如调试可能揭示的那样,它们通常被称为ClassName$$EnhancerBySpringCGLIB$$XXXXXXXX
或其他名称
当开始初始化bean时,它已经与cglib代理一起工作。代理方法的构造是为了满足Spring的要求(例如,@Bean
@Scope(“singleton”)
方法的每次调用都将返回相同的实例)
它使得声明bean之间的依赖关系成为可能。在第二种方法中,我们使用some()
或this.some()
知道它将在运行时引用代理方法
为什么我会推荐第一种方法
您可以立即看到bean需要哪些依赖项—它们都列在签名中。使用
@Configuration
时没有区别。请阅读以下内容: