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

标签 java spring dependency-injection autowired

我的印象是否正确,通过使用常规的 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/

相关文章:

java - 在java中转换html文件

java - Spring Boot不加载application.properties

Spring JDO - makePersistent 不返回创建的对象

c# - 构造函数不能调用自己

java - Spring - 我什么时候应该考虑在同一个 JVM 中加载另一个上下文?

maven-2 - 依赖注入(inject)在使用 Jersey 和 OpenWebBeans 的 Tomcat 7 上不起作用

java - 如何手动按字典顺序比较 "abcd"& ""abcde"有效

java - 将 Apache Beam 的 PCollection 对象收集到驱动程序内存中

java - java中如何获取带有动态参数的构造函数

java - Spring MVC 为匹配模式的所有 url 提供相同的静态内容