在之前的xml配置中.我們都要注冊(cè)好各類之間的依賴關(guān)系
比如
 1<!-- other -->
 2  <!-- 配置bean3和bean4共用的部分抽取出來 -->
 3  <bean id="bean34" abstract="true"> <!--將這個(gè)類聲明成抽象類 -->
 4     <property name="id" value="10"/>  <!-- 屬性即是bean3和bean4兩個(gè)類共有的元素.并賦值 -->
 5     <property name="name" value="tom"/>
 6  </bean>
 7  <!-- 配置bean3 和bean 4 -->
 8    <!-- 使用parent的值為上面注冊(cè)的id:bean34. 相當(dāng)于bean3繼承bean34 -->
 9  <bean id="bean3" class="com.zyl.spring.Bean3" parent="bean34">
10     <property name="password" value="1235"/>  <!-- 在bean3中只需配置公共部分沒有的,自己獨(dú)有的屬性即可 -->
11     <property name="name" value="這個(gè)在公共中有定義值.如果bean3中再定義.則以bean3覆蓋原來的配置內(nèi)容"></property>
12  </bean>
13  <bean id="bean4" class="com.zyl.spring.Bean4" parent="bean34"></bean>
14  <!-- 以下配置bean3.4.5 -->
15  <bean id="bean2" class="com.zyl.spring.Bean2">
16      <property name="bean3" ref="bean3"/><!-- bean2用引用了bean3.4.5 -->
17      <property name="bean4">
18         <ref bean="bean4"/>  <!-- 這種寫法和上面那種效果一樣 -->
19      </property>
20      <property name="bean5" ref="bean5"/> <!-- name為bean2中定義的變量名,ref為配置文件的id名 -->
21  </bean>  
22  <bean id="bean5" class="com.zyl.spring.Bean5"> <!-- 接下來描述bean5的元素 -->
23      <property name="age" value="10"/><!-- 設(shè)定值為10 -->
24  </bean>
這樣一個(gè)配置中,我們注冊(cè)了Bean3.4.5之后
在Bean2中有依賴bean3.4.5所以在第16~20行需要注冊(cè)之.然后通過ref指向bean id名
這樣做配置起來比較麻煩.  (但推薦這樣做,因?yàn)榭梢院芮宄目吹筋愔g依賴關(guān)系.而且日后的維護(hù)工作也很容易)
接下來,我們看下如何簡化這個(gè)配置.(用于快速開發(fā)的時(shí)候,效果不錯(cuò))
代碼參考whyspringofautobyName
之前的Bean2.3.4.5予以保留.
保留test中的testInjection2()
配置文件中刪除Bean1的配置.
然后開始吧:

華麗的分割線=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
配置文件的beans 修改成

1<?xml version="1.0" encoding="UTF-8"?>
2<beans
3    xmlns="http://www.springframework.org/schema/beans"
4    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" 
6default-autowire="byName">
添加一下第6行的代碼即可.
將之前的bean2的配置修改
之前的配置讓我們回憶一下:

1  <bean id="bean2" class="com.zyl.spring.Bean2">
2      <property name="bean3" ref="bean3"/><!-- bean2用引用了bean3.4.5 -->
3      <property name="bean4">
4         <ref bean="bean4"/>  <!-- 這種寫法和上面那種效果一樣 -->
5      </property>
6      <property name="bean5" ref="bean5"/> <!-- name為bean2中定義的變量名,ref為配置文件的id名 -->
7  </bean>  
將其修改成
 <bean id="bean2" class="com.zyl.spring.Bean2">即可

運(yùn)行test  會(huì)發(fā)現(xiàn)效果滿足.
現(xiàn)在解釋一下: 配置文件會(huì)在bean2中找到依賴的元素:
如:
1    private Bean3 bean3;
2    private Bean4 bean4;
3    private Bean5 bean5;
根據(jù)他們的變量名bean3 bean4 bean5 (其實(shí)更正確的理解應(yīng)該是setBean3.4.5 的小寫bean3.4.5 .不過沒關(guān)系.前面的說法更好理解)
根據(jù)那個(gè)變量名到配置文件中尋找bean id 相同的注冊(cè)之.(這就要求你的bean id 名不能亂取了. 所以采用根據(jù)名稱自動(dòng)注冊(cè).需要注意bean id和屬性名的一致.)
如果我們修改bean id 則,spring會(huì)找不到.

接下來,看看我們把beans中的配置修改為default-autowire="byType"
其他的不變.
運(yùn)行效果同樣滿足
名探偵柯南答疑:
  spring會(huì)根據(jù)bean2中的
1    private Bean3 bean3;
2    private Bean4 bean4;
3    private Bean5 bean5;
里邊的元素bean2.3.4的類型即是 Bean2.3.4類尋找
配置文件中注冊(cè)的元素的類型 即 bean中的class="**.**.Bean2/3/4"通過這樣來注入.
這樣做的好處,在于bean id名可以隨便取.

奇淫巧技耳,不過我們可以看到spring做的很好很強(qiáng)大.人家是一心一意的為您服務(wù).
這篇就到這里吧. 對(duì)spring有個(gè)更多點(diǎn)的了解.這孩子還是蠻可愛的.