javascript
spring自动装配依赖包_解决Spring自动装配中的循环依赖
spring自動(dòng)裝配依賴包
我認(rèn)為這篇文章是在企業(yè)應(yīng)用程序開發(fā)中使用Spring的最佳實(shí)踐。使用Spring編寫企業(yè)Web應(yīng)用程序時(shí),服務(wù)層中的服務(wù)量可能會(huì)增加。
服務(wù)層中的每個(gè)服務(wù)可能會(huì)消耗其他服務(wù),這些服務(wù)將通過@Autowire注入。
問題:當(dāng)服務(wù)數(shù)量開始增加時(shí),可能會(huì)發(fā)生循環(huán)依賴性。 它不必指出設(shè)計(jì)問題……只要在許多服務(wù)中自動(dòng)連接并消耗其他服務(wù)之一的中央服務(wù)就足夠了,就可能發(fā)生循環(huán)依賴。
循環(huán)依賴關(guān)系將導(dǎo)致Spring Application Context失敗,并且癥狀是一個(gè)錯(cuò)誤,清楚地表明了問題所在:
名稱為'*********'的Bean已被注入其他Bean [******,**********,**********, **********]的原始版本(作為循環(huán)引用的一部分),
但最終被包裝(例如,作為自動(dòng)代理創(chuàng)建的一部分)。 這意味著所說的其他bean不使用該bean的最終版本。 這通常是過度渴望類型匹配的結(jié)果–例如,考慮在關(guān)閉“ allowEagerInit”標(biāo)志的情況下使用“ getBeanNamesOfType”。
現(xiàn)代Spring應(yīng)用程序中的問題是,bean是通過@nnotations(而不是通過XML)定義的,而allowEagerInit標(biāo)志的選項(xiàng)根本不存在。
用@Lazy注釋類的替代解決方案對(duì)我來說根本不起作用。
可行的解決方案是將default-lazy-init =“ true”添加到應(yīng)用程序配置xml文件中:
<?xml version="1.0" encoding="UTF-8"?> <beans default-lazy-init="true" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd ><context:component-scan base-package="com.package"></context:component-scan> <context:annotation-config/> ... </beans> 希望這可以幫助。 不知道為什么它不是默認(rèn)配置。
如果您對(duì)為什么這種配置可能不滿意有任何建議,請(qǐng)與我們所有人分享。
更新:
經(jīng)過重新設(shè)計(jì)后,上述解決方案根本無法解決問題。
因此,我設(shè)計(jì)了更積極的解決方案,以5個(gè)步驟解決了該問題 。
祝好運(yùn)!
參考:通過Gal Levinsky博客博客中的JCG合作伙伴 Gal Levinsky 解決了Spring Autowiring中的循環(huán)依賴問題 。
翻譯自: https://www.javacodegeeks.com/2012/08/resolve-circular-dependency-in-spring.html
spring自動(dòng)裝配依賴包
總結(jié)
以上是生活随笔為你收集整理的spring自动装配依赖包_解决Spring自动装配中的循环依赖的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查询ip地址如何查询路由器内网ip
- 下一篇: JAXB和Log4j XML配置文件