SSH框架之Spring的IOC容器的對象依賴關係(2)

繼續來介紹SpringIOC容器的對象依賴關係,本文介紹p名稱空間注入屬性值、自動裝配。

一、p名稱空間注入屬性值

<?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"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- ###############對象屬性賦值############### -->

    <!-- 
        給對象屬性注入值:
            # p 名稱空間給對象的屬性注入值
             (spring3.0以上版本才支持)
     -->
     <bean id="userDao" class="mfq.test.UserDao"></bean>

     <bean id="userService" class="mfq.test.UserService" p:userDao-ref="userDao"></bean>

     <bean id="userAction" class="mfq.test.UserAction" p:userService-ref="userService"></bean>


    <!-- 傳統的注入: 
     <bean id="user" class="mfq.test.User" >
        <property name="name" value="Endeavor"></property>
     </bean>
    -->
    <!-- p名稱空間優化後 -->
    <bean id="user" class="mfq.test.User" p:name="Endeavor"></bean>
</beans>   

二、自動裝配
1、根據名稱自動裝配:autowire=”byName”
自動去IOC容器中找與屬性名同名的引用的對象,並自動注入。

<!-- ###############自動裝配############### -->  
    <bean id="userDao" class="mfq.test.UserDao"></bean> 
    <bean id="userService" class="mfq.test.UserService" autowire="byName"></bean>
    <!-- 根據“名稱”自動裝配: userAction注入的屬性,會去ioc容器中自動查找與屬性同名的對象 -->
    <bean id="userAction" 
class="mfq.test.UserAction" autowire="byName"></bean>

2、定義到全局, 這樣就不用每個bean節點都去寫autowire=”byName”

<?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"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byName">   <!--根據名稱自動裝配(全局)-->

    <!-- ###############自動裝配############### -->  
    <bean id="userDao" class="mfq.test.UserDao"></bean> 
    <bean id="userService" class="mfq.test.UserService"></bean>
    <bean id="userAction" class="mfq.test.UserAction"></bean>
</beans>   

3、根據類型自動裝配:autowire=”byType”
必須確保改類型在IOC容器中只有一個對象,否則報錯。

<?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"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byType">      <!--根據類型自動裝配(全局)-->

    <!-- ###############自動裝配############### -->  
    <bean id="userDao" class="mfq.test.UserDao"></bean> 
    <bean id="userService" class="mfq.test.UserService"></bean>

    <!-- 如果根據類型自動裝配: 必須確保IOC容器中只有一個該類型的對象 -->
    <bean id="userAction" class="mfq.test.UserAction"></bean>


    <!--   報錯: 因爲上面已經有一個該類型的對象,且使用了根據類型自動裝配
    <bean id="userService_test" class="mfq.test.UserService" autowire="byType"></bean>
     -->
</beans>  

4、總結:
Spring提供的自動裝配主要是爲了簡化配置,但是不利於後期的維護。
(一般不推薦使用)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章