Spring容器帮我们实例化对象并且注入到需要该对象的类中。
Setter注入
public class ClassA {
private ClassB classB;
public void printClassB(){
System.out.println(classB);
}
public void setClassB(ClassB classB){
this.classB = classB;
}
}
public class ClassB {
}
applicationContext.xml配置文件:
<!-- <bean>中的id属性是bean的标识,必须唯一。class属性是类的完全限定名,指明由哪个类来实例化。 -->
<bean id="classB" class="com.mvc.ClassB"/>
<!-- <property>是用来指明要注入的属性和对象的,<property>标签中的name就是就是注入方法名去掉前面的set,剩下的这一截首字母大小写可不限。ref指向要注入的对象(id)。对象是引用实例,所以要用ref,如果是传值,则用value。 -->
<bean id="classA" class="com.mvc.ClassA">
<property name="classB" ref="classB" />
</bean>
另外要注意的是:property name只和注入方法名相关,和内部属性名没有半毛关系。所以ClassA类改成下面这样也是可以的:
public class ClassA {
private ClassB classBBB;
public void setClassB(ClassB classB){
this.classBBB = classB;
}
}
构造器注入
构造函数也是一个注入点。现在我们把上例的setter注入改为构造注入。
public class ClassA {
private ClassB classB;
/*构造函数注入*/
public ClassA(ClassB classB){
this.classB = classB;
}
public void printClassB(){
System.out.println(classB);
}
}
applicationContext.xml配置文件:
将<property name="classB" ref="classB" />
改为<constructor-arg ref="classB" />
这样就完成了构造器注入。
多参数构造函数赋值:
<bean id="order" class="twm.spring.start.Order" >
<constructor-arg index="0" value="张老三"></constructor-arg>
<constructor-arg index="2" ref="notify"></constructor-arg>
<constructor-arg index="1" value="2017877997"></constructor-arg>
</bean>