zoukankan      html  css  js  c++  java
  • Spring之属性注入

    时间: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="宝马"/>
            <constructor-arg name="price" value="300000"/>
            <!-- 使用索引进行注入 -->
            <constructor-arg index="0" type="java.lang.String" value="奔驰"/>
            <constructor-arg index="1" type="java.lang.Double" value="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="保时捷" />
            <property name="price" value="800000" />
        </bean>


    ——set方法注入对象属性

    需要使用<property>标签中的ref属性,属性的值是其它Bean的id或name。

    示例代码:

        <bean id="person" class="com.wyc.spring3.demo5.Person">
            <property name="name" value="张三" />
            <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="#{表达式}" />
        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="#{'大众'}" />
            <property name="price" value="#{'200000'}" />
        </bean>
     
        <bean id="person" class="com.wyc.spring3.demo5.Person">
            <property name="name" value="#{personInfo.name}" />
            <property name="car2" value="#{car2}"/>
        </bean>
     
        <bean id="personInfo" class="com.wyc.spring3.demo5.PersonInfo" >
            <property name="name" value="赵六"></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="张三"></entry>
                <entry key="2" value="李四"></entry>
                <entry key="3" value="王五"></entry>
                <entry key="4" value="赵六"></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="属性值" />
            >   引用属性
                <property name="属性名" ref="其他类的id或name" />
        *   集合属性的注入

  • 相关阅读:
    Node.js基础学习一之Get请求
    Node.js学习准备篇
    如何在eclipse添加SVN菜单
    Java泛型的好处
    mybatis多数据源配置
    Python map() 函数
    python split()使用方法
    pythom os 模块
    深浅copy
    小数据池
  • 原文地址:https://www.cnblogs.com/wwwwyc/p/6375482.html
Copyright © 2011-2022 走看看