programmer's home, welcome here!

          technical issues and my life

          導航

          <2007年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章檔案

          閱讀排行榜

          評論排行榜

          常用鏈接

          統(tǒng)計

          最新評論

          Spring內核研究-管理bean之間的關系二(自動依賴檢查)

          自動依賴檢查可以保證所有java bean中的屬性(set方法)都在Spring中正確的配置。如果在一個java bean中定義了一個name屬性,并且也setName方法。那么在開啟自動依賴檢查功能后,就必須在Spring中定義這個屬性,否則Spring將拋出異常。
          請看下面的例子:
          Dao.java
          包含一個setName方法。
          package research.spring.beanfactory.ch3; public class Dao { private String name; public void setName(String name) { this.name = name; } }

          context.xml
          <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean name="dao" class="research.spring.beanfactory.ch3.Dao"> </bean> <bean id="database" class="research.spring.beanfactory.ch3.Database"> </bean> </beans>

              我們在context.xml沒有定義Dao的name屬性。上面的配置,Spring可以正常的實例化Dao對象。
          下面我們修改context.xml:
          我們通過dependency-check=all,在Dao上增加了自動依賴檢查的功能。
          <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean name="dao" class="research.spring.beanfactory.ch3.Dao" dependency-check="all" > </bean> <bean id="database" class="research.spring.beanfactory.ch3.Database"> </bean> </beans>

           
          當配置依賴檢查時,Spring實例化Dao時會拋出一個異常:


           
          Spring定義了4種依賴檢查的策略:
           
          • none(默認)
              不進行依賴檢查。
          • simple
              只對簡單屬性和集合中的簡單屬性進行檢查。不對依賴的對象檢查。
          • objects
              只對為對象類型的屬性進行檢查。
          • all
              對所有類型進行檢查。
           
              如果把上面例子里的context.xml改成這樣:
          <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean name="dao" class="research.spring.beanfactory.ch3.Dao" dependency-check="objects" > </bean> <bean id="database" class="research.spring.beanfactory.ch3.Database"> </bean> </beans>

           Spring將不會拋出異常,因為objects只對依賴的對象進行檢查。
           
          dependency-check在Spring中又以下的限制:
           
          1.  不能對構造函數中的參數進行檢查。
          2.  即使屬性中有默認值,只要包含了set方法,那么dependency-check仍然需要檢查Spring中是否配置了這個屬性。
           
          package research.spring.beanfactory.ch3; public class Dao { private Database database; private String name="chenjie"; //dependency-check仍然會檢查這個屬性是否配置注入 public void setName(String name) { this.name = name; } public void setDatabase(Database database) { this.database = database; } }
          即使Dao設置里name得默認值,但是只要有setName方法,dependency-check仍然會判斷是否在配置文件中設置了setName對應的注入。

          posted on 2007-04-09 03:01 crazy zerlot 閱讀(235) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 福清市| 原阳县| 洛川县| 中超| 丰台区| 仁寿县| 含山县| 安陆市| 东乌| 台北县| 广安市| 黔江区| 南雄市| 宁远县| 安化县| 嵊泗县| 武宁县| 杭锦旗| 怀来县| 宣汉县| 浠水县| 东宁县| 昭通市| 密山市| 博湖县| 重庆市| 浦江县| 镇远县| 启东市| 德保县| 安国市| 潜江市| 广西| 乌拉特中旗| 琼结县| 新巴尔虎左旗| 壤塘县| 施甸县| 惠水县| 留坝县| 都江堰市|