隨筆-124  評論-194  文章-0  trackbacks-0
          有時候,在SPRING中兩個類互相含有對方的聲明,一般情況這是不允許并且極可能是有錯誤的。
          會報這個錯:
          org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘***’: Bean with name ‘***’ has been injected into other beans [***, ***]in its raw version as part of a circular reference,

          but has eventually been wrapped (for example as part of auto-proxy creation). This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using ‘getBeanNamesOfType’ with the ‘allowEagerInit’ flag turned off, for example.


          但有時候這正是我們想要的,考慮這種情況:
          我們用一個ManagerFactory來包含所有Manager的聲明,以便在程序中用到多個Manager的地方,一個入口集中訪問。但是,可能某個Manager本身就需要用到其它幾個Manager,進而用到ManagerFactory。這時,我們可以這樣聲明即可:

           <bean id="managerFactory" class="common.utils.ManagerFactory" lazy-init="true"/>
          posted on 2008-02-24 10:13 我愛佳娃 閱讀(38435) 評論(11)  編輯  收藏 所屬分類: Spring

          評論:
          # re: SPRING循環依賴(circular reference)的解決方法 2008-02-24 10:48 | 完美世界私服
          <bean id="managerFactory" class="common.utils.ManagerFactory" lazy-init="true"/>
          ???????  回復  更多評論
            
          # re: SPRING循環依賴(circular reference)的解決方法 2008-02-24 20:39 | 我愛佳娃
          即在循環依賴的BEAN定義中,加入屬性值:lazy-init="true",只需有一方A是延遲初始化,另一邊B即不會因為A又指向自己而出現上述錯誤。  回復  更多評論
            
          # re: SPRING循環依賴(circular reference)的解決方法[未登錄] 2008-07-12 02:39 | james
          你測試過嗎,你的spring版本是多少?
          在2.0.8下,你即使加了lazy-init="true",也不行  回復  更多評論
            
          # re: SPRING循環依賴(circular reference)的解決方法 2008-07-13 11:41 | 我愛佳娃
          我所舉例子,即我的程序代碼,一直工作很好。
          MAVEN的SPRING配置片斷:
          <spring.version>2.5.1</spring.version>

          <!-- spring begin -->
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
          </dependency>
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>${spring.version}</version>
          </dependency>
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
          </dependency>
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${spring.version}</version>
          </dependency>
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>${spring.version}</version>
          </dependency>
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
          </dependency>
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
          <scope>test</scope>
          </dependency>
          <dependency>
          <groupId>aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>1.5.3</version>
          </dependency>
          <dependency>
          <groupId>concurrent</groupId>
          <artifactId>concurrent</artifactId>
          <version>1.3.4</version>
          </dependency>
          <!-- spring end -->  回復  更多評論
            
          # re: SPRING循環依賴(circular reference)的解決方法[未登錄] 2008-11-20 17:21 | yang
          我的spring2.5,加上 lazy-init="true" 還是錯誤依舊。  回復  更多評論
            
          # re: SPRING循環依賴(circular reference)的解決方法 2008-11-22 08:27 | 我愛佳娃
          我也沒啥好建議了!不過可以嘗試:
          請使用2.5.1版本。
          另外,只在一邊加lazy-init,兩邊換著試下。  回復  更多評論
            
          # re: SPRING循環依賴(circular reference)的解決方法 2008-11-27 11:27 | fofo
          @我愛佳娃
          但如果A中有B,B中有A的話,如何延遲一方都是不成功的!這個參數lazy-init是不是只適合于一方依賴一方,互相依賴的話應該不行吧!有沒有其他解決方案呢?  回復  更多評論
            
          # re: SPRING循環依賴(circular reference)的解決方法 2009-01-15 07:57 | 鯤鵬鴻翔
          好用~!  回復  更多評論
            
          # re: SPRING循環依賴(circular reference)的解決方法[未登錄] 2009-10-21 10:27 | test
          # re: SPRING循環依賴(circular reference)的解決方法 2013-11-15 10:46 | mingzai
          業務類spring配置時候不要用prototype,用單例模式.  回復  更多評論
            
          # re: SPRING循環依賴(circular reference)的解決方法 2014-11-25 16:08 | liabco
          謝謝,加上 lazy-init="true"問題解決了   回復  更多評論
            
          主站蜘蛛池模板: 封丘县| 黑龙江省| 呼玛县| 南安市| 睢宁县| 涿州市| 锡林郭勒盟| 磴口县| 中西区| 怀化市| 农安县| 梅州市| 张家川| 胶南市| 平远县| 腾冲县| 峨山| 牡丹江市| 蓝山县| 防城港市| 调兵山市| 岳阳县| 菏泽市| 微山县| 砀山县| 林甸县| 辽阳市| 手机| 宾川县| 大冶市| 奉化市| 方山县| 车致| 禹城市| 互助| 江源县| 上虞市| 金堂县| 司法| 洞头县| 双牌县|