时间:2017-1-31 23:38
——Bean的属性注入方式
有三种注入方式:
1)接口注入:
定义一个接口,定义setName(String name)方法,定义一个类,实现该接口,并提供private String name。
2)构造器注入:
定义一个类,声明一个private String name,通过构造器this.name = name;进行注入。
在配置文件中使用<constructor-arg>标签。
3)通过set方法注入:
在类中声明成员变量,并且提供set()方法。
在配置文件中使用<property>标签。
这种注入方式最常用。
——构造器注入
在配置文件中使用<constructor-arg>标签进行设置。
该标签有五个属性:
* name:表示属性名称
* value:表示属性值
* index:表示构造器参数的索引
* type:表示属性的类型,例如:java.lang.String
* ref:表示引用对象
示例代码:
<bean id="car" class="com.wyc.spring3.demo5.Car">
<!-- 使用name进行注入 -->
<constructor-arg name="name" value="http://www.mamicode.com/宝马"/>
<constructor-arg name="price" value="http://www.mamicode.com/300000"/>
<!-- 使用索引进行注入 -->
<constructor-arg index="0" type="java.lang.String" value="http://www.mamicode.com/奔驰"/>
<constructor-arg index="1" type="java.lang.Double" value="http://www.mamicode.com/500000"/>
</bean>
——set方法注入
在类中提供局部成员变量,并且提供set方法。
在配置文件中使用<property>标签。
<property>标签中有三个属性:
* name:表示属性的名称
* value:表示普通属性的值
* ref:表示引用对象
示例代码:
<bean id="car2" class="com.wyc.spring3.demo5.Car2">
<!-- name表示属性名称,value表示普通属性的值,ref表示引用的是一个对象 -->
<property name="name" value="http://www.mamicode.com/保时捷" />
<property name="price" value="http://www.mamicode.com/800000" />
</bean>
——set方法注入对象属性
需要使用<property>标签中的ref属性,属性的值是其它Bean的id或name。
示例代码:
<bean id="person" class="com.wyc.spring3.demo5.Person">
<property name="name" value="http://www.mamicode.com/张三" />
<property name="car2" ref="car2" />
</bean>
——名称空间p
为了简化XML文件配置,Spring2.5开始引入一个新的p名称空间。
使用方法:
1)在<beans>标签中添加:xmlns:p="http://www.springframework.org/schema/p"
2)p:<属性名>="xxx" 引入普通变量值
3)p:<属性名>-ref="xxx" 引入其他Bean对象
示例代码:
<bean id="car2" class="com.wyc.spring3.demo5.Car2" p:name="保时捷" p:price="2000000" />
<bean id="person" class="com.wyc.spring3.demo5.Person" p:name="李四" p:car2-ref="car2"/>
——SpEL属性注入
Spring3.0开始提供的表达式语言。
语法:
#{表达式}
<bean id="" value="http://www.mamicode.com/#{表达式}" />
1)直接使用字符串常量
#{‘哈哈哈‘}
2)使用另一个Bean对象
#{person} // 根据其他bean标签的id属性获取
3)使用指定对象的属性
#{person.name}
4)使用方法的返回值作为属性
#{person.showName()} // 会将showName()方法的返回值作为value的值
5)使用静态字段或方法
#{T(java.lang.Math).PI}
示例代码:
<bean id="car2" class="com.wyc.spring3.demo5.Car2">
<property name="name" value="http://www.mamicode.com/#{‘大众‘}" />
<property name="price" value="http://www.mamicode.com/#{‘200000‘}" />
</bean>
<bean id="person" class="com.wyc.spring3.demo5.Person">
<property name="name" value="http://www.mamicode.com/#{personInfo.name}" />
<property name="car2" value="http://www.mamicode.com/#{car2}"/>
</bean>
<bean id="personInfo" class="com.wyc.spring3.demo5.PersonInfo" >
<property name="name" value="http://www.mamicode.com/赵六"></property>
</bean>
——集合属性的注入
示例代码:
public class CollectionBean {
private List<String> list;
private Set<String> set;
private Map<String, String> map;
// 继承自HashTable
private Properties properties;
private String[] array;
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Set<String> getSet() {
return set;
}
public void setSet(Set<String> set) {
this.set = set;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
@Override
public String toString() {
return "CollectionBean [list=" + list + ", set=" + set + ", map=" + map + ", properties=" + properties + ", array=" + Arrays.toString(array) + "]";
}
public String[] getArray() {
return array;
}
public void setArray(String[] array) {
this.array = array;
}
}
----------------------------------------------------------------------------------------------------------------------------
配置文件:
<bean id="collectionBean" class="com.wyc.spring3.demo6.CollectionBean">
<!-- 注入List集合 -->
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<value>赵六</value>
<!-- <ref></ref> -->
</list>
</property>
<!-- 注入set集合 -->
<property name="set">
<set>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<value>赵六</value>
</set>
</property>
<!-- 注入map集合 -->
<property name="map">
<map>
<entry key="1" value="http://www.mamicode.com/张三"></entry>
<entry key="2" value="http://www.mamicode.com/李四"></entry>
<entry key="3" value="http://www.mamicode.com/王五"></entry>
<entry key="4" value="http://www.mamicode.com/赵六"></entry>
</map>
</property>
<!-- 注入properties属性 -->
<property name="properties">
<props>
<prop key="username">张三</prop>
<prop key="password">123456</prop>
</props>
</property>
<!-- 注入数组 -->
<property name="array">
<array>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<value>赵六</value>
</array>
</property>
</bean>
——总结
IoC装配Bean(XML)
* 语法:
> <bean id="" class="" />
> id:满足XML的id约束语法,id不能重复,不能存在特殊字符
> name:可以重复,可以存在特殊字符
> 如果只配置name,那么就可以将name的值作为id。
* 配置Bean的其他属性
> init-method
初始化方法。
> destroy-method
销毁方法。
> scope
singleton:单例
prototype:多例
* DI注入属性:
> 普通属性
<property name="属性名" value="http://www.mamicode.com/属性值" />
> 引用属性
<property name="属性名" ref="其他类的id或name" />
* 集合属性的注入
Spring之属性注入