gpt4 book ai didi

java - Spring @Autowired 链和常规 'new XYZ()' 实例化

转载 作者:行者123 更新时间:2023-12-01 12:15:46 26 4
gpt4 key购买 nike

我的印象是否正确,通过使用常规的 new XYZ() 方式实例化某些组件 XYZ 会阻止 Spring 处理 XYZ 内的 @Autowired 字段?

第二个问题:我不能在 XYZ 中使用依赖注入(inject)并同时在 XYZ 中使用最终字段,这是正确的吗?示例:

@Component
public class XYZ {
@Autowired
private SomeDep dep;

private final int value;

public XYZ(int value) {
this.value = value;
}
}

我该如何使其发挥作用?

所以,好吧,接受没有更好的方法,让我们这样做吧:

@Component
public class XYZ {
@Autowired
private SomeDep dep;

private final int value;

// factory instantiation
XYZ() {
value=0;
}

private XYZ(SomeDep dep, int value) {
this.dep = dep;
this.value = value;
}

public XYZ getInstance(int value) {
return new XYZ(dep, value);
}
}

???那太丑了。当我想将依赖声明移动到父类时,它会变得更加丑陋......???我一直觉得DI不错。我想我必须重新考虑这一点。有哪些替代方案?我错过了什么吗?

最佳答案

  1. 如果您使用 new 创建对象,@Autowired 将不起作用,因为该对象是在 Spring IoC container 之外创建的。 。所以这个对象应该由spring实例化,以便让它注入(inject)依赖。要从容器(spring 应用程序上下文)获取此对象(bean),您应该 initialize Spring context并调用context.getBean(“beanName”)。
  2. 您可以在此处使用构造函数依赖注入(inject)。 Here您可以阅读有关注入(inject)类型的更多信息

关于java - Spring @Autowired 链和常规 'new XYZ()' 实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27016693/

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