java - spring中的顺序依赖注入(inject)是什么?

标签 java spring dependency-injection

我有一个关于 spring 依赖注入(inject)的问题。 我需要知道依赖项是否按照在 XML 中声明的顺序注入(inject),或者 没有这样的顺序。

示例:

<bean id="empBean" class="com.test.EmployeeBean">
      <property name="jdbcTemplate" ref="jdbcTemplate" />
       <property name="empAddress" ref="empAddress" />
    </bean>

我们能否保证jdbcTemplate总是在empName之前初始化?请帮忙

最佳答案

您不能保证这些将以任何特定顺序注入(inject),并且您应该设计您的 bean,使其无关紧要——这很容易实现。

所以这个类是糟糕的代码,因为它在 bean 创建后的状态会根据 Spring 注入(inject)的顺序而有所不同:

public class BadClass {
    private String foo = "";
    private String foobar = "";

    public void setFoo(String foo) {
        this.foo = foo;
    }

    public void setBar(String bar) {
        this.foobar = foo + bar;
    }

    public String toString() {
        return foobar;
    }
}

因为:

 BadClass c = new BadClass(); 
 c.setFoo("foo");
 c.setBar("bar"); 
 return c.toString()` 

...返回“foobar”

 BadClass c = new BadClass(); 
 c.setBar("bar"); 
 c.setFoo("foo");
 return c.toString()` 

...返回“bar”

许多人认为最好的做法是使用构造函数注入(inject),在这种情况下,所有注入(inject)都将在构造函数的一次调用中发生。

public class BetterClass {
    private String foo = "";
    private String foobar = "";

    public BetterClass(String foo, String bar) {
        this.foo = foo;
        this.foobar = foo + bar;
    }

    public String toString() {
        return foobar;
    }
}

关于java - spring中的顺序依赖注入(inject)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45210671/

相关文章:

java - 如果使用 @Local 注释 (EJB),则会出错

java - 为什么 Collection.equals() JavaDoc 说不可能同时正确实现 List 和 Set?

.net - 是否有更喜欢约定而不是配置的 .NET IoC?

c# - 将一个类绑定(bind)到多个接口(interface)作为单例

dependency-injection - 跨多个测试套件的 Scalatest 共享服务实例

java hibernate Eclipse xml

java - JEE7中如何在JNDI树中指定EJB bean名称

java - Spring - 在 Java 配置类中注入(inject)构造函数参数

java - 使用 Spring Rabbitmq Stomp 的持久队列

java - 限制需要反序列化的json字段为java对象的字段