P名称空间注入
P名称空间注入走的也是set方法, 官方目的是简化set注入的property标签的写法
- bean对象
public class ConstructorDIDaoImpl implements ICustomerDao {
private int id;
private String name;
private int age;
private Date birthday;
get/set()......
}
步骤
1. 导入p名称空间
xmlns:p="http://www.springframework.org/schema/p"
2. 书写配置,使用 p: 属性完成注入
- 值类型
p:属性名="值"
- 引用类型
p:属性名-ref="引用对象的名字"
- 配置文件
<!-- p名称空间注入,说明:p名称空间注入,其实还是调用set方法注入
第一步:导入p名称空间(位置:
..\spring-framework-4.3.8.RELEASE-dist\spring-framework-4.3.8.RELEASE\
docs\spring-framework-reference\html\beans.html)
第二步配置:
p:属性名称:给简单类型的成员变量赋值
p:属性名称-ref:给其它bean类型的成员变量赋值
-->
<bean id="pDao" class="cn.dao.impl.SetDependencyDaoImpl"
p:id="1" p:name="Hello" p:age="18" p:birthday-ref="now"
></bean>
<bean id="now" class="java.util.Date"></bean>
集合属性注入
顾名思义,就是给类中的集合成员传值,它用的也是 set 方法注入的方式,只不过变量的数据类型都是集合。我们这里介绍注入数组,List,Set,Map,Properties。
- 数据结构相同,标签可以互换
- List结构:
array/list/set - Map结构:
map/entry/props/prop
- List结构:
具体代码如下:
public class CollectionDIServiceImpl implements CustomerService {
private String[] arr;
private List<String> list;
private Set<String> set;
private Map<String,String> map;
private Properties prop;
set/get().......
}
- 配置文件
<!-- 集合类型数据的注入,说明:
细节:数据结构相同,标签可以呼唤
1.list/array/set
2.map/properties
-->
<bean id="collectionDao" class="cn.dao.impl.CollectionDependencyDaoImpl">
<!-- 数组 -->
<property name="array">
<!-- <array>
<value>array1</value>
<value>array2</value>
<value>array3</value>
</array> -->
<list>
<value>array1</value>
<value>array2</value>
<value>array3</value>
</list>
</property>
<!-- list -->
<property name="list">
<!-- <list>
<value>list1</value>
<value>list2</value>
<value>list3</value>
</list> -->
<array>
<value>list1</value>
<value>list2</value>
<value>list3</value>
</array>
</property>
<!-- set -->
<property name="set">
<set>
<value>set1</value>
<value>set2</value>
<value>set3</value>
</set>
</property>
<!-- map -->
<property name="map">
<!-- <map>
<entry key="mapk1" value="mapv1"></entry>
<entry key="mapk2" value="mapv2"></entry>
<entry key="mapk3" value="mapv3"></entry>
</map> -->
<props>
<prop key="mapk1">mapv1</prop>
<prop key="mapk2">mapv2</prop>
<prop key="mapk3">mapv3</prop>
</props>
</property>
<!-- properties -->
<property name="prop">
<!-- <props>
<prop key="propk1">propv1</prop>
<prop key="propk2">propv2</prop>
<prop key="propk3">propv3</prop>
</props> -->
<map>
<entry key="propk1" value="propv1"></entry>
<entry key="propk2" value="propv2"></entry>
<entry key="propk3" value="propv3"></entry>
</map>
</property>
</bean>
SpEL的方式的属性注入:Spring3.x版本后提供的方式.
SpEL:Spring Expression Language, Spring表达语言
- 语法:#{ SpEL }
<bean id="pDao" class="cn.dao.impl.SetDependencyDaoImpl"
p:id="1" p:name="Hello" p:age="18" p:birthday-ref="now"
></bean>
<!-- SpEL 的注入的方式 -->
<bean id="SpelDao" class="cn.dao.impl.SetDependencyDaoImpl">
<!--
拿其他对象的属性给自己赋值
#{其他对象名字.属性名}
-->
<property name="id" value="#{pDao.id}"></property>
<property name="name" value="#{pDao.name}"></property>
<property name="age" value="#{pDao.age}"></property>
<property name="birthday" ref="now"></property>
</bean>