DI依赖注入,对象的属性注入值;(spring实现)
(基于set方法实现,要求类中有set方法)
<bean id="userEntity" class="cn.fish9.spring.UserEntity">
<property name="key1" value="1"></property>
<property name="key2" value="1"></property>
<!-可以使用ref来传递对象--->
<property name="key3" ref="menDao"></property>
</bean>
Name:类中的属性名称
Value:需要注入属性值
<bean id="userEntity" class="cn.fish9.spring.UserEntity">
<constructor-arg name="key1" value="value1"></constructor-arg>
<constructor-arg name="key2" value="value2"></constructor-arg>
</bean>
//或者使用索引来替代name
<bean id="userEntity" class="cn.fish9.spring.UserEntity">
<constructor-arg index="0" value="value1"></constructor-arg>
<constructor-arg index="1" value="value2"></constructor-arg>
</bean>
其中UserEntity类中需要有有参构造方法,如下:
public UserEntity(String key1,String key2){
}
(基于set方法实现,要求类中有set方法)
头部xml改成如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
......
</beans>
区别在于添加了
xmlns:p="http://www.springframework.org/schema/p"
使用p标签注入值
<bean id="userEntity" class="cn.fish9.spring.UserEntity" p:key1="123" p:key2="1234">
</bean>
在bean属性中注入空值,可以在<property>标签中添加<null>标签,来表示当前的值为null
<bean id="userEntity" class="cn.fish9.spring.UserEntity">
<property name="key1" >
<null></null>
</property>
</bean>
bean属性注入特殊字符的方式
错误写法:
<!--首先下面是错误写法,无法注入特殊字符-->
<bean id="userEntity" class="cn.fish9.spring.UserEntity">
<property name="key1" value="<<test>>"></property>
</bean>
需要注入特殊字符,有两种方式:
①转移特殊符号
<<
转移为<<
>>
转移为>>
②使用cdata
<bean id="userEntity" class="cn.fish9.spring.UserEntity">
<property name="key1" >
<value><![CDATA[<<test>>]]></value>
</property>
</bean>
<!--memberService注入到ioc容器中-->
<bean id="memberService" class="cn.fish9.spring.MemberService">
<!--
name="membberDao" MemberService类中属性的名称
ref memberDao 在ioc容器中注入的beanid
-->
<property name="memberDao" ref="memberDao"></property>
</bean>
<!--MemberDaoImp注入到ioc容器中-->
<bean id="memberDao" class="cn.fish9.spring.MemberDaoImpl"></bean>
<bean id="userEntity" class="cn.fish9.spring.UserEntity">
<!--普通属性注入-->
<property name="name" value="fish9"></property>
<property name="addres" value="湖北省武汉市"></property>
<!--注入内部bean对象-->
<property name="deptEntity" >
<bean id="deptEntity" class="cn.fish9.spring.DeptEntity">
<property name="name" value="教育部门名字"></property>
</bean>
</property>
</bean>
注意:memberDao对象中的属性需要有get方法才能这样传递级联赋值bean对象。
<bean id="memberService" class="cn.fish9.spring.MemberService">
<property name="memberDao" ref="memberDao"></property>
<property name="memberDao.name" value="部门名称"></property>
</bean>
<bean id="memberDao" class="cn.fish9.spring.MemberDaoImpl"></bean>
<bean id="stuEntity" class="cn.fish9.spring.entity.StuEntity">
<property name="list" >
<list>
<value>list01</value>
<value>list02</value>
</list>
</property>
<property name="array" >
<array>
<value>array01</value>
<value>array02</value>
</array>
</property>
<property name="map" >
<map>
<entry key="cat" value="test"></entry>
<entry key="fish" value="ee"></entry>
</map>
</property>
<property name="set" >
<set>
<value>array01</value>
<value>array02</value>
</set>
</property>
</bean>
<!--注入list类型为对象类型ref bean-->
<property name="courser" >
<list>
<ref bean="courseEntity_java"></ref>
<ref bean="courseEntity_c"></ref>
</list>
</property>
<!--下面开始创建需要注入的对象-->
<!--java课程的对象-->
<bean id="courseEntity_java" class="cn.fish9.entity.CourseEntity">
<property name="name" value="java"></property>
</bean>
<!--c课程的对象-->
<bean id="courseEntity_c" class="cn.fish9.entity.CourseEntity">
<property name="name" value="c"></property>
</bean>