1. 程式人生 > >01-spring配置詳解

01-spring配置詳解

eth height 直接 arr work ssp creat exp context

1 bean元素

<!--將User對象交給spring容器進行管理  -->
    <!-- Bean元素:使用該元素描述需要spring容器管理的對象
            class屬性:被管理對象的完整類名.
            name屬性:給被管理的對象起個名字.獲得對象時根據該名稱獲得對象.  
                    可以重復.可以使用特殊字符.
            id屬性: 與name屬性一模一樣. 
                    名稱不可重復.不能使用特殊字符.
            結論: 盡量使用name屬性.
      
--> <bean name="user" class="www.test.bean.User"></bean>

2 對象的三種創建方式

   <!--對象創建方式1-空參數構造  -->
    <bean name="user" class="www.test.bean.User"></bean>
    
    <!-- ================================================  -->
    <!--對象創建方式2-靜態工廠創建
        調用UserFactory的靜態方法createUser方法創建名為user2的對象.放入容器
      
--> <bean name="user2" class="www.test.b_create.UserFactory" factory-method="createUser"></bean> <!-- ===================================================== --> <!--對象創建方式3-實例工廠創建 --> <!--調用UserFactory對象的createUser2方法創建名為user3的對象.放入容器 -->
<bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean> <bean name="userFactory" class="www.test.b_create.UserFactory" />

3 scope屬性

技術分享圖片

<bean name="user" class="www.test.bean.User" scope="singleton"></bean>
<bean name="user" class="www.test.bean.User" scope="prototype"></bean>
public void fun1(){
        //1創建容器對象applicationContext
        ApplicationContext ac = new ClassPathXmlApplicationContext("www/test/b_create/applicationContext.xml");
        //2向容器中"要"user對象
        User user1 = (User) ac.getBean("user");
        User user2 = (User) ac.getBean("user");
        User user3 = (User) ac.getBean("user");
        User user4 = (User) ac.getBean("user");
        //3打印user
        System.out.println(user1==user4); // singletom : true
                                          // prototype : false
    }

4 初始化&銷毀方法

技術分享圖片

技術分享圖片

@Test
    //測試對象的生命周期
    public void fun4(){
        //1 創建容器對象
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("www/test/b_create/applicationContext.xml");
        //2 向容器“要”User對象
        User user = (User) ac.getBean("user");
        //3打印
        System.out.println(user);
        ac.close();
    }

技術分享圖片

5 模塊化配置

<!--導入其它spring配置  -->
<import resource="www/test/b_create/applicationContext.xml"/>

6 屬性的註入

1 set方式註入

<!--set方式註入  -->
<bean name="user" class="www.test.bean.User">
    <!--值類型註入: 為User對象中名為name的屬性註入tom作為值 -->
    <property name="name" value="tom"></property>
    <property name="age" value="25"></property>
    <!-- 引用類型註入: 為car屬性註入下方配置的car對象 -->
    <property name="car" ref="car"></property>
</bean>
<!-- 將car對象配置到容器中 -->
<bean name="car" class="www.test.bean.Car">
    <property name="name" value="奧迪"></property>
    <property name="color" value="黑色"></property>
</bean>

2 構造函數註入

<!-- 將car對象配置到容器中 -->
<bean name="car" class="www.test.bean.Car">
    <property name="name" value="奧迪"></property>
    <property name="color" value="黑色"></property>
</bean>

<!-- ============================================= -->
<!-- 構造函數註入  -->
<bean name="user2" class="www.test.bean.User">
    <constructor-arg name="name" value="lucy"></constructor-arg>
    <constructor-arg name="car" ref="car"></constructor-arg>
</bean>
<bean name="user3" class="www.test.bean.User">
    <constructor-arg name="name" index="0" value="jack"></constructor-arg>
    <constructor-arg name="car" ref="car"></constructor-arg>
</bean>
<bean name="user4" class="www.test.bean.User">
    <constructor-arg name="name" index="1" value="jack"></constructor-arg>
    <constructor-arg name="car" ref="car"></constructor-arg>
</bean>
<bean name="user5" class="www.test.bean.User">
    <constructor-arg name="name" index="0" type="java.lang.Integer" value="888"></constructor-arg>
    <constructor-arg name="car" ref="car"></constructor-arg>
</bean>

3 p 名稱空間

<!-- p名稱空間註入, 走set方法
1.導入P名稱空間  xmlns:p="http://www.springframework.org/schema/p"
2.使用p:屬性完成註入
    |-值類型: p:屬性名="值"
    |-對象類型: p:屬性名-ref="bean名稱"
    -->
<bean name="user6" class="www.test.bean.User" 
p:name="jerry" p:age="15" p:car-ref="car"></bean>

4 spel註入

<!-- 
spel註入: spring Expression Language sping表達式語言
-->
<bean name="user7" class="www.test.bean.User">
    <property name="name" value="#{user6.name}"></property>
    <property name="age" value="#{user.age}"></property>
    <property name="car" ref="car"></property>
</bean>

7 復雜類型的註入

<!-- 復雜類型的註入 -->
<bean name="cb" class="www.test.bean.CollectionBean">
    <!-- 如果數組中只準備註入一個值(對象),直接使用value|ref即可 -->
    <!-- <property name="arr" value="tom"></property> -->
    <!-- <property name="arr" ref="car"></property> -->
    
    <!-- array註入,多個元素註入 -->
    <property name="arr">
        <array>
            <value>tom</value>
            <value>jerry</value>
            <ref bean="user4" />
        </array>
    </property>
    
    <!-- 如果List中只準備註入一個值(對象),直接使用value|ref即可 -->
    <!-- <property name="list" value="jack"></property> -->
    <!-- <property name="list" ref="user"></property> -->
    
    <!-- list註入,多個元素註入 -->
    <property name="list">
        <list>
            <value>jack</value>
            <value>lisi</value>
            <value>zhangsan</value>
            <ref bean="user"/>
        </list>
    </property>
    
    <!-- map類型註入 -->
    <property name="map">
        <map>
            <entry key="url" value="jdbc:mysql:///spring"></entry>
            <entry key="user" value-ref="user6"></entry>
            <entry key-ref="user2" value-ref="user" ></entry>
        </map>
    </property>
    
    <!-- prperties 類型註入 -->
    <property name="prop">
        <props>
            <prop key="url">jdbc:mysql:///spring</prop>
            <prop key="class">com.mysql.jdbc.Driver</prop>
            <prop key="user">root</prop>
            <prop key="password">root</prop>
        </props>
    </property>
    
</bean>

01-spring配置詳解