Java-Spring框架-基于xml方式注入属性

Java
294
0
0
2023-04-14
标签   Spring

基于xml方式注入属性

DI依赖注入,对象的属性注入值;(spring实现)

第一种实现方式:基于对象属性set方法实现

(基于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){
    }

使用p标签为属性注入值

(基于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属性注入空值与特殊字符

在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>

需要注入特殊字符,有两种方式:

①转移特殊符号

<<转移为&lt;&lt;

>>转移为&gt;&gt;

②使用cdata

<bean id="userEntity" class="cn.fish9.spring.UserEntity">
    <property name="key1" >
        <value><![CDATA[<<test>>]]></value>
    </property>
</bean>

spring注入属性外部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>

spring注入内部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>

级联赋值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>