spring 構造方法注入和setter方法注入的XML表達


1.構造方法注入

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
 3 <beans>
 4     <bean id="person" class="com.thief.demo.Person">
 5         <constructor-arg value="1"/>
 6         <constructor-arg value="Tom"/>
 7         <constructor-arg ref="friend"/>        
 8     </bean>
 9     
10     <bean id="friend" class="com.thief.demo.Friend">
11         <constructor-arg value="Jack"/>
12     </bean>
13 </beans>

2.setter方法注入

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
    <bean id="person" class="com.thief.demo.Person">
        <property name="id" value="1"/>
        <property name="name" value="Tom"/>
        <property name="friend" ref="friend"/>
    </bean>
    
    <bean id="friend" class="com.thief.demo.Friend">
        <property name="name" value="Jack"/>
    </bean>
</beans>

3.<property>和<constructor-arg>中可用的配置項。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
 3 <beans>
 4     <!-- <value>:為對象注入String類型、基本數據類型和它們的包裝器類型的數據 -->
 5     <!-- 示例一 -->
 6     <bean id="person" class="com.thief.demo.Person">
 7         <constructor-arg>
 8             <value>11111</value>
 9         </constructor-arg>
10         <property name="id">
11             <value>11111</value>
12         </property>
13     </bean>
14     <!-- 示例二 -->
15     <bean id="person2" class="com.thief.demo.Person">
16         <constructor-arg value="11111"/>
17         <property name="id" value="11111"/>
18     </bean>
19     
20     
21     <!-- <ref>:引用容器中其他的對象實例 -->
22     <bean id="person2" class="com.thief.demo.Person">
23         <constructor-arg ref="friend"/>
24         <property name="friend" ref="friend"/>
25     </bean>
26     <bean id="friend" class="com.thief.demo.Friend">
27         <property name="name" value="Jack"/>
28     </bean>
29     
30     
31     <!-- 內部<bean>:如果所依賴的對象只有當前一個對象引用,或者某個對象定義不想其他對象通過<ref>引用到它,這時候就可以使用內部<bean> -->
32     <bean id="person3" class="com.thief.demo.Person">
33         <constructor-arg>
34             <bean class="com.thief.demo.Friend"/>
35         </constructor-arg>
36     </bean>
37     
38     
39     <!-- <list>:<list>對應注入對象類型為java.util.List及其子類或者數組類型的依賴對象 -->
40     <bean id="person4" class="com.thief.demo.Person">
41         <property name="list">
42             <list>
43                 <value>11111</value>
44                 <ref bean="friend"/>
45                 <bean class="com.thief.demo.Friend"/>
46             </list>
47         </property>
48     </bean>
49     
50     
51     <!-- <set>:<set>對應注入Java Collection中類型為java.util.Set或者其子類的依賴對象 -->
52     <bean id="person5" class="com.thief.demo.Person">
53         <property name="set">
54             <set>
55                 <value>11111</value>
56                 <ref bean="friend"/>
57                 <bean class="com.thief.demo.Friend"/>
58             </set>
59         </property>
60     </bean>
61     
62     
63     <!-- <map>:<map>對應注入對象類型為java.util.Map或者其子類類型的依賴對象 -->
64     <bean id="person6" class="com.thief.demo.Person">
65         <property name="map">
66             <map>
67                 <entry key="id">
68                     <value>11111</value>
69                 </entry>
70                 <entry key="friend">
71                     <ref bean="friend"/>
72                 </entry>
73             </map>
74         </property>
75     </bean>
76     
77     
78     <!-- <props>: <props>對應配置類型為java.util.Properties的對象依賴 -->
79     <bean id="person7" class="com.thief.demo.Person">
80         <property name="props">
81             <props>
82                 <prop key="id">11111</prop>
83                 <prop key="name">Tom</prop>
84             </props>
85         </property>
86     </bean>
87 </beans>
View Code

4.autowire

除了可以通過配置明確指定bean之間的依賴關系,Spring還提供了根據bean定義的某些特點將相互依賴的某些bean直接自動綁定的功能。通過bean的autowire屬性,可以指定當前bean定義采用某種類型的自動綁定模式。這樣就無需手工明確指定該bean定義相關的依賴關系,從而也可免去一些手工輸入的工作量。

Spring提供了5種自動綁定模式,即no,byName,byType,constructor和autodetect。

• no

容器默認的自動綁定模式,也就是不采用任何形式的自動綁定,完全依賴手工明確配置各個bean之間的依賴關系。

• byName

按照類中聲明的實例變量的名稱,與XML配置文件中聲明的bean定義的beanName的值進行匹配,相匹配的bean定義將被自動綁定到當前實例變量上。

• byType

如果指定當前bean定義的autowire模式為byType,那么,容器會根據當前bean定義類型,分析其相應的依賴對象類型,然后到容器所管理的所有bean定義中尋找與依賴對象類型相同的bean定義,然后將找到的符合條件的bean自動綁定到當前bean定義。

如果找不到,則不做設置。但如果找到多個,容器無法解決“該選用哪一個”的問題,需要你對該問題進行修正。所以,byType只能保證,在容器中只存在一個符合條件的依賴對象的時候才會發揮最大的作用。

• constructor

byName和byType類型的自動綁定模式是針對property的自動綁定,而constructor類型則是針對構造方法參數的類型而進行的自動綁定,它同樣是byType類型的綁定模式。不過,constructor是匹配構造方法的參數類型,而不是實例屬性的類型。與byType模式類似,如果找到不止一個符合條件的bean定義,那么,容器會返回錯誤。

• autodetect

這中模式是byType和constructor的結合體,如果對象擁有默認無參數的構造方法,容器會優先考慮byType的自動綁定模式。否則,會使用constructor模式,當然,如果通過構造方法注入綁定后還有其他屬性沒有綁定,容器也會使用byType對剩余的對象屬性進行綁定。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM