gpt4 book ai didi

java - 配置类中的注入(inject)或方法调用

转载 作者:行者123 更新时间:2023-12-01 09:48:45 25 4
gpt4 key购买 nike

在下面的示例中,resultresult2 bean 定义之间有什么不同:

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

@Configuration
public class Application {

@Bean
public Integer data1() {
return 42;
}

@Bean
public Integer data2() {
return 7;
}

@Bean
public Integer result(
@Qualifier("data1") Integer a,
@Qualifier("data2") Integer b) {
return a + b;
}

@Bean
public Integer result2() {
return data1() + data2();
}


public static void main(final String... args) {
final ApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
System.out.println(context.getBean("result"));
System.out.println(context.getBean("result2"));
}
}
  • 是否有相关的最佳实践?
  • 有什么缺点吗?

最佳答案

第一个问题:有什么区别吗?

是的,result 版本将使用依赖项注入(inject)获得它所依赖的两个 bean,并遵循有关这些 bean 范围的所有规则。 result2 版本本身调用两个工厂方法,并且没有利用依赖注入(inject)。

第二个问题和第三个问题:有什么最佳实践或缺点吗?

第一个真正让 spring 注入(inject)依赖项的版本受益于 spring 依赖项注入(inject)带来的所有优势。您可以指定范围并覆盖要在其他上下文中注入(inject)的 Bean 的规范。

另一个版本只会对两个工厂方法本身进行硬编码调用,这意味着工厂方法本身不能注入(inject)任何依赖项,并且不会尊重任何注释(例如范围)。

我的建议是使用遵循依赖注入(inject)范例的版本一。否则,至少应将这两个工厂方法视为常规方法,并删除 spring 注释,以免欺骗代码的任何读者,以为 spring 管理 bean 生命周期。

想象一个不简单的示例,其中 data1data2 正在创建由其他几个 bean 使用的复杂 bean,并且您可能希望基于以下情况更改实际实例:根据上下文,例如单元测试、测试/阶段环境或生产...

关于java - 配置类中的注入(inject)或方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37767668/

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