我有一个关于 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/