spring中的顺序依赖注入是什么?

Reh*_*man 4 java spring dependency-injection

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

例子 :

<bean id="empBean" class="com.test.EmployeeBean">
      <property name="jdbcTemplate" ref="jdbcTemplate" />
       <property name="empAddress" ref="empAddress" />
    </bean>
Run Code Online (Sandbox Code Playgroud)

我们能保证alwaysjdbcTemplate会在之前初始化empName吗?请帮忙

sli*_*lim 5

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

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

因为:

 BadClass c = new BadClass(); 
 c.setFoo("foo");
 c.setBar("bar"); 
 return c.toString()` 
Run Code Online (Sandbox Code Playgroud)

...返回"foobar"

 BadClass c = new BadClass(); 
 c.setBar("bar"); 
 c.setFoo("foo");
 return c.toString()` 
Run Code Online (Sandbox Code Playgroud)

...返回"bar"

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)