属性注入
注入方式

手动注入

1 setter方法注入
2 构造器注入



<bean id="key" class="dao.Impl.KeyWordsSearchDaoImpl" lazy-init="false"></bean> 

<!-- 配置业务层bean --> 
<bean id="service" class="service.impl.KeyWordsSearchServiceDaoImpl" scope="prototype" init-method="initService"> 
<!-- 构造器完成属性注入 --> 
<!-- index属性值为目标属性在含参构造器中作为形参的位置  
 属性为基本数据类型时,既可以在constructor标签中直接使用value属性进行属性值的设定,也可以使用其子标签value进行设定 
--> 
<constructor-arg index="0"> 
<value type="java.lang.String">我是spring的创始人约翰大叔哦</value> 
</constructor-arg> 

<!-- 属性为对象属性时 既可以在constructor标签中直接使用ref属性指定bean,也可以使用其子标签ref指定bean --> 
<constructor-arg index="1"> 
<!-- ref的bean和local的区别: 
 bean:会在所有已加载的spring配置文件(包括本配置文件以外的其他的spring子配置文件)中寻找id为bean=""的bean实例  
 local:只在当前该配置文件中寻找目标bean 
--> 
<ref bean="key"/> 
</constructor-arg> 
</bean>

自动注入

即不用再手动的在bean标签中进行属性的注入,由spring自动完成注入
bean标签的autowire属性 有3种取值:

1 byName:根据属性名自动注入,要求bean的id值key和KeyWordSearchServiceDaoImpl类中的属性名key一致;

<!--配置数据访问层bean --> 
<bean id="key" class="dao.Impl.KeyWordsSearchDaoImpl"></bean> 

<!-- 配置业务层bean --> 
<bean id="service" class="service.impl.KeyWordsSearchServiceDaoImpl" autowire="byName">

2 byType:和byName不同,它是根据属性的类型来注入。比如在UserService类中有一个属性udao,也有setUdao法。只需要保证在配置文件中有一个和udao属性的类型一样的bean,就可以完成自动注入

3 dependency-check:

注入类型

基本类型( setter或constructor 均可用)
bean的子标签属性值或
bean标签的value属性直接注入值

<bean id="cha1" class="domain.Cha"> 
 <property name="name"> 
 <value type="java.lang.String">张建</value> 
 </property> 

 <property name="gender"> 
 <value>男</value> 
 </property> 
 </bean> 



<bean id="cha1" class="domain.Cha" scope="prototype"> 
 <property name="name" value="张建"></property> 

 <property name="gender" value="男"></property> 
</bean>

对象类型: 使用property标签的ref属性引用另一个bean或
使用property的子标签ref 完成对象属性的注入
ref标签的两个属性:
bean:外部引用:从已加载的配置文件中寻找目标bean
local:从当前本配置文件中寻找目标bean

<bean id='dat' class="java.util.Date"></bean> 
<bean id="keyWords" class="domain.KeyWords"> 
 <!-- 对象类型 --> 
 <property name="addTime" ref="dat"></property> 
</bean>

集合类型:

<bean id="cha1" class="domain.Cha" scope="prototype"> 
 <property name="name"> 
 <value type="java.lang.String">张建</value> 
 </property> 

 <property name="gender"> 
 <value>男</value> 
 </property> 
</bean> 

<bean id="cha2" class="domain.Cha" scope="prototype"> 
 <property name="name"> 
 <value type="java.lang.String">zhangyongzhe</value> 
 </property> 

 <property name="gender" value="nv"> 
 </property> 
</bean>

list

<bean id="keyWords" class="domain.KeyWords"> 
<!-- list类型 --> 
 <property name="chaList"> 
 <!-- list加泛型后 加上value-tpye属性 --> 
 <list value-type="domain.Cha"> 
 <ref bean="cha1" /> 
 <ref bean="cha2" /> 
 </list> 
 </property> 
</bean>

set

<bean id="keyWords" class="domain.KeyWords"> 
<!-- set类型 --> 
 <property name="chaSet"> 
 <!-- Set加泛型后 加上value-tpye属性 --> 
 <set value-type="domain.Cha"> 
 <!-- set容器中的自定义类Cha不用我们再重写equals和hashcode方法.spring会动态重写这两个方法 --> 
 <ref bean="cha1" /> 
 <ref bean="cha2" /> 
 </set> 
 </property> 
</bean>

map

<bean id="keyWords" class="domain.KeyWords"> 
<!-- map类型 --> 
 <property name="chaMap"> 
 <!-- Map加泛型后 加上key-type和value-type属性 --> 
 <map key-type="java.lang.String" value-type="domain.Cha"> 
 <entry key="one" value-ref="cha1"></entry> 
 <entry key="two" value-ref="cha2"></entry> 
 </map> 
 </property> 
</bean>

properties

<!-- 配置JDBCHelper类的bean --> 
 <bean id="jdbcHelper" class="commons.JDBCHelper"> 
 <!-- properties是系统类,不是自定义的类,用props标签及其子标签进行属性注入 --> 
 <property name="properties"> 
 <props> 
 <!-- 数据库驱动 --> 
 <prop key="driver">com.mysql.jdbc.Driver</prop> 
 <!-- url --> 
 <prop key="url">jdbc:mysql://localhost:3306/test</prop> 
 <!-- 用户名 --> 
 <prop key="root">root</prop> 
 <!-- 密码 --> 
 <prop key="password">root</prop> 
 </props> 
 </property> 
 </bean>