繼續來介紹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提供的自動裝配主要是爲了簡化配置,但是不利於後期的維護。
(一般不推薦使用)