1. 依赖注入
基于构造函数的依赖注入:构造函数包含若干参数
public class SimpleMovieLister {
// the SimpleMovieLister has a dependency on a MovieFinder
private MovieFinder movieFinder;
// a constructor so that the Spring container can inject a MovieFinder
public SimpleMovieLister(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// business logic that actually uses the injected MovieFinder is omitted...
}
这里有一个构造函数参数顺序问题。如果说参数之间不存在二义性,则在bean中定义的顺序不重要,但是如果存在二义性,则必须指定顺序。
<span style="color:#009900;">// 顺序无关</span>
package x.y;
public class Foo {
public Foo(Bar bar, Baz baz) {
// ...
}
}
如果类Bar和类Baz之间没有关联,则可进行以下配置,在<contructor-arg/>中不需要显示设置参数的index或者type<beans>
<bean id="foo" class="x.y.Foo">
<constructor-arg ref="bar"/>
<constructor-arg ref="baz"/>
</bean>
<bean id="bar" class="x.y.Bar"/>
<bean id="baz" class="x.y.Baz"/>
</beans>
// 顺序有关 package examples; public class ExampleBean { // Number of years to calculate the Ultimate Answer private int years; // The Answer to Life, the Universe, and Everything private String ultimateAnswer; public ExampleBean(int years, String ultimateAnswer) { this.years = years; this.ultimateAnswer = ultimateAnswer; } }这里就必须制定index或type,如下两种方法。第一个方法为参数指定了type,第二个方法为参数指定了index。还可以通过将参数名字赋予name属性,如第三个方法。
<bean id="exampleBean" class="examples.ExampleBean"> <constructor-arg type="int" value="7500000"/> <constructor-arg type="java.lang.String" value="42"/> </bean>
<bean id="exampleBean" class="examples.ExampleBean"> <constructor-arg index="0" value="7500000"/> <constructor-arg index="1" value="42"/> </bean>
<bean id="exampleBean" class="examples.ExampleBean"> <constructor-arg name="years" value="7500000"/> <constructor-arg name="ultimateAnswer" value="42"/> </bean>
基于Setter方法的依赖注入