gpt4 book ai didi

java - @Bean 初始化 - 参数注入(inject)与直接方法访问之间的区别?

转载 作者:行者123 更新时间:2023-11-30 06:03:43 24 4
gpt4 key购买 nike

如果一个服务 bean 依赖于另一个:将那个 bean 作为方法参数注入(inject)或直接从方法引用中获取有什么区别吗?

@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 实例,您隐式地与 cglib 生成的内存中子类交互并由 Spring 的包支持 org.springframework.cglib.proxy (类如 EnhancerMethodProxy 等)。

正如调试可能揭示的那样,它们通常被称为 ClassName$$EnhancerBySpringCGLIB$$XXXXXXXX 或其他名称。

BeanFactory开始初始化 beans,它已经可以与 cglib 代理一起使用。代理的方法被构造成满足 Spring 的要求(例如,每次调用 @Bean @Scope("singleton") 方法将返回相同的实例)。

它可以声明 bean 间的依赖关系。在第二种方法中,我们使用 some()this.some() 知道它将在运行时引用代理方法。

为什么我会推荐第一种方法?

您会立即看到 bean 需要哪些依赖项 - 它们都列在签名中。

关于java - @Bean 初始化 - 参数注入(inject)与直接方法访问之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51522278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com