1. 通过set方法注入依赖
1) 简单值注入
public void setUserName(String userName){…}
public String getUserName(){…}
public void setAge(int age){…}
public int getAge(){…}
<bean id=”user” class=”cn.com.book.demo.User”>
<property name=”userName”>
<value>Noble Yang</value>
</property>
<property name=”age”>
<value>30</value>
</property>
</bean>
2) 引用其它Bean
public void setUser(User user){…}
public User getUser(){…}
<bean id=”userDAO” class=”cn.com.book.demo.UserDAO”>
<property name=”user”>――属性名
<ref bean=”user”/>――被引用的其它bean
</property>
</bean>
3) 内部Bean
<bean id=”userDAO” class=”cn.com.book.demo.UserDAO”>
<property name=”user”>
<bean class=”cn.com.book.demo.User”/>
</property>
</bean>
这样做的必要是,内部定义的Bean,只能外部的Bean单个用,其它Bean用不了
4) 装配集合
<list> java.util.List, Arrays
<set> java.util.Set
<map> java.util.Map
<props> java.util.Properties
i) 装配List和数组
public void setList(List list){…}
public List getList(){…}
<bean …>
<property name=”list”>
<list>
<value>Noble Yang</value>
<ref bean=”user”/>
…可以是任何类型
</list>
</property>
</bean>
ii) 装配Set
<property name=”set”>
<set>
…同List的一样
</set>
</property>
iii) 装配Map
<property name=”map”>
<map>
<entry key=”key 1” >
<value>Noble Yang</value>
</entry>
<entry key=”key 2” >
<ref bean=”user”/>
</entry>
… 其它对象
</map>
</property>
iv) 装配Properties
<property name=”props”>
<props>
<prop key=”key 1” >value1</prop>
<prop key=”key 2” >value2</prop>
…
</props>
</property>
5) 设置null值
<property name=”userName”>
<null/>
</property>
6)
2. 构造器方式注入
1) 一个参数构造器
<bean id=”user” class=”cn.com.book.demo.User”>
<constructor-arg>
<value>Noble Yang</value> or <ref bean=”otherBean”/>
</constructor-arg>
</bean>
2) 多个参数构造器
<bean id=”user” class=”cn.com.book.demo.User”>
<constructor-arg index=” 0” >
<value>Noble Yang</value>
</constructor-arg>
<constructor-arg index=” 1” >
<value>30</value>
</constructor-arg>
</bean>
或
<bean id=”user” class=”cn.com.book.demo.User”>
<constructor-arg type=”java.lang.String”>
<value>Noble Yang</value>
</constructor-arg>
<constructor-arg type=”int”>
<value>30</value>
</constructor-arg>
</bean>
3)
3. 自动装配
1) byName――根据名字在容器中寻找同属性名相同的Bean(或ID),找不到不装配
2) byType――根据属性类型,在容器中找相同类型的Bean,如果没有,就不装配,如果找到多个,抛UnsatisfiedDependencyExcpetion异常
3) constructor――根据构造器参数类型在容器中寻找,效果同byType一样
4) autodetect――先用constructor,然后用byType,效果同它们一样
上面四种方式的使用方式如下:
<bean id=”user” class=”cn.com.book.demo.User”
autowire=”byName|byType|constructor|autodetect”/>
5) 自动和手动混合装配
<bean id=”user” class=”cn.com.book.demo.User” autowise=”byName”>
<property name=”age”>
<value>30</value>
</property>
</bean>
优先手动装配
6) 缺省自动装配
缺省情况下,bean不会被自动装配,除非在bean标签中指定autowire属性。但是,我们可以在根标签<beans>中指定default-autowire属性,来将所有bean指定成为自动装配
<beans default-autowire=”byName”>
这样所有的bean都是按byName的方式进行自动装配