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吗?请帮忙
您不能保证这些将以任何特定顺序注入,并且您应该设计您的 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)
| 归档时间: |
|
| 查看次数: |
5667 次 |
| 最近记录: |