spring-依赖注入 配置文件 标签: spring 2017-04-07 17:59 60人阅读 评论(0)

Spring 支持 3 种依赖注入的方式
属性注入
构造器注入
工厂方法注入(很少使用,不推荐)

属性注入

<bean id="helloword" class="com.xzcl.helloword.helloword">
    <property name="userName" value="xzcl"></propety>
</bean>

属性注入使用 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 子节点指定属性值

构造方法注入

默认顺序给构造函数参数赋值

<bean id="car" class="com.xzcl.spring.beans.Car">
        <constructor-arg value="AUDI"></constructor-arg>
        <constructor-arg value="Shanghai"></constructor-arg>
        <constructor-arg value="22222" ></constructor-arg>  
</bean>


指定顺序给构造函数参数赋值

<bean id="car" class="com.xzcl.spring.beans.Car">
        <constructor-arg value="AUDI" index="0"></constructor-arg>
        <constructor-arg value="Shanghai" index="1"></constructor-arg>
        <constructor-arg value="22222" index="2"></constructor-arg> 
    </bean>


按类型给构造函数参数赋值

<bean id="car" class="com.xzcl.spring.beans.Car">
<constructor-arg value="AUDI" type="java.lang.String"></constructor-arg>
<constructor-arg value="Shanghai" type="java.lang.String"></constructor-arg>
<constructor-arg value="22222" type="int"></constructor-arg>
</bean>

对应的bean



package com.xzcl.spring.beans;

public class Car {

    private String brand;
    private String corp;
    private int price;
    private int maxSpeed;

    public Car(String brand, String corp, int price) {
        super();
        this.brand = brand;
        this.corp = corp;
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price
                + ", maxSpeed=" + maxSpeed + "]";
    }


}

细节

如和字面值包含特殊字符 可以使用<![CDATA[]]> 把包含起来

<bean id="car1" class="com.xzcl.spring.beans.Car">
        <constructor-arg value="AUDI" type="java.lang.String"></constructor-arg>
        <constructor-arg  type="java.lang.String">
            <value><![CDATA[<shanghai^>]]></value>
        </constructor-arg>
        <constructor-arg value="22222" type="java.lang.Integer"></constructor-arg>  
</bean>

属性值也可以用value子节点配置

引入其他的bean

<bean id="person" class="com.xzcl.spring.beans.Person">
        <property name="name" value="zhangsan"></property>
        <property name="age" value="18"></property> 
        <!-- 可以使用  property 的 ref 属性 建立bean之间的引用关系-- >
        <property name="car" ref="car"></property>
    </bean>

第四行中 ref 属性 引用的就是 其他bean的 ID

内部bean方式

<bean id="person2" class="com.xzcl.spring.beans.Person">
        <property name="name" value="zhangsan"></property>
        <property name="age" value="18"></property> 
        <property name="car" >
            <bean class="com.xzcl.spring.beans.Car">
                <constructor-arg value="AUDI" type="java.lang.String"></constructor-arg>
                <constructor-arg value="Shanghai" type="java.lang.String"></constructor-arg>
                <constructor-arg value="22222" type="int"></constructor-arg>    
            </bean>
        </property>
    </bean>

list类型的属性如和赋值

<bean id="person3" class="com.xzcl.spring.beans.collection.Person">
        <property name="name" value="lisi"></property>
        <property name="age" value="19"></property>
        <property name="cars" >
        <!--使用List节点  为list 类型的属性赋值 -->
            <list>
                <ref bean="car" />
                <ref bean="car1"/>
            </list>
        </property>
    </bean>

map类型的属性如和赋值

<!-- 配置map属性值 -->
    <bean id="personnew" class="com.xzcl.spring.beans.collection.Person2">
        <property name="name" value="lisi"></property>
        <property name="age" value="19"></property>
        <property name="cars">
            <map>
                <entry key="AA" value-ref="car"></entry>
                <entry key="BB" value-ref="car1"></entry>
            </map>
        </property>

    </bean>

Properties类型的属性如和赋值

<!--配置Properties 属性值  -->
    <bean id="dataSource" class="com.xzcl.spring.beans.collection.DataSource">
        <property name="properties">
        <!-- 使用 props 和 prop子节点为properties 属性赋值 -->
            <props>
                <prop key="user">root</prop>
                <prop key="password">xzcl1230</prop>
                <prop key="jdbcurl">jdbc:mysql:///test</prop>
                <prop key="driverClass">com.mysql.jdbc.drives</prop>
            </props>
        </property>
    </bean>

配置独立的集合bean,以供多个bean进行引用

<!--配置独立的集合bean ,以供多个bean进行引用 ,需要导入util命名空间-->
    <util:list id="cars">
        <ref bean="car"/>
        <ref bean="car1"/>
    </util:list>
posted @ 2017-04-07 17:59  xzcl  阅读(110)  评论(0编辑  收藏  举报