DI注入
1.构造方法注入
在xml文件中配置
1.1<constructor-arg />表示法
<bean id="person" class="com.yc.bean.Person">
<constructor-arg type="String" value="bobo" />
<constructor-arg type="double" value="42.0" />
<constructor-arg type="double" value="42.0" />
</bean>
根据bean中的构造函数中的参数定义:type=参数名,value=定义的参数值
bean:
public class Person {
private String name;
private double height;
private double weight;
public Person(String name, double height, double weight) {
super();
this.name = name;
this.height = height;
this.weight = weight;
}
}
1.2 c-namespace 表示法
<bean id="bar" class="x.y.Bar"/>
<bean id="baz" class="x.y.Baz"/>
<bean id="foo" class="x.y.Foo">
<constructor-arg ref="bar"/>
<constructor-arg ref="baz"/>
<constructor-arg value="foo@bar.com"/>
</bean>
可替换为 ,构造函数的参数依次写入
<bean id="foo" class="x.y.Foo" c:bar-ref="bar" c:baz-ref="baz" c:email="foo@bar.com"/>
2.set方法注入
2.1<property/>注入
同样,在引用其他bean时,通过set方法来注入
public class Classes {
private Person person ;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
xml中
<bean id="person" class="com.yc.bean.Person">
</bean>
<bean name="classes" class="com.yc.bean.Classes">
<property name="name" ref="person" /> //引入
<property name = "claid" value="12" /> //直接注入
</bean>
2.2 p-namespace p短名注入
<bean name="cla" class="com.yc.bean.Classes">
<property name="name" value="foo@bar.com" />
<property name="person" ref = "person" />
</bean>
替代为
<bean name="p-namespace" class="com.yc.bean.Classes" p:name="foo@bar.com" p:spouse-ref="person"/>
p:属性名
p:spouse-ref:要引入的bean id
3.集合注入
public class TestData {
private Properties adminEmails ;
private List someList ;
private Map someMap ;
private Set someSet;
.......(其他set方法和toString方法略...)
}
在xml中注入
<bean id="testData" class="com.yc.test.TestData">
<property name="adminEmails">
<props>
<prop key="键">值</prop>
<prop key="support">support@example.org</prop>
<prop key="development">development@example.org</prop>
</props>
</property>
<property name="someList">
<list>
<value>值:a list element followed by a reference</value>
</list>
</property>
<property name="someMap">
<map>
<entry key="键名" value="键值" />
<entry key="a ref" value-ref="dataSourcePool" />
</map>
</property>
<property name="someSet">
<set>
<value>值</value>
</set>
</property>
</bean>