我在几个环境中都有很多bean的遗留项目。看起来bean之间存在循环依赖关系,这就是为什么大多数上下文都将default-lazy-init
设置为 true 。
我需要通过RMI导出一些bean,所以我在上下文中有以下声明:
<bean id="partnershipPluginService" class="com.otr.sufd.services.security.PartnershipPluginServiceImpl" lazy-init="false">
<property name="selectionService" ref="selectionService"/>
<property name="editObjectService" ref="editObjectService"/>
<property name="securityFieldsService" ref="securityFieldsService"/>
<property name="cryptoSettingsService" ref="cryptoSettingsService"/>
<property name="authenticationService" ref="systemAuthenticationService"/>
<property name="configurationManager" ref="serverConfigurationManager"/>
<property name="lifeCycleDefService" ref="lifeCycleDefService"/>
</bean>
<bean class="org.springframework.remoting.rmi.RmiServiceExporter" depends-on="partnershipPluginService" lazy-init="false">
<property name="registryPort" value="${rmi.port}"/>
<property name="serviceName" value="partnershipPluginService"/>
<property name="serviceInterface" value="com.otr.security.synchronization.service.PartnershipPluginService"/>
<property name="service" ref="partnershipPluginService"/>
</bean>
这两个bean都声明为不是懒惰。我thibk,足够声明至少有一个RmiServiceExporter
非懒惰,具有相同的行为。
在这种配置中存在一个很大的缺点。它不起作用。我在上下文创建过程中有例外
org.springframework.beans.factory.BeanCreationException:错误 创建名为'partnershipSystemPluginService'的bean 类路径资源 [security / serverSecurityServices.xml]:不行 在设置bean时解析对bean'cryptoSettingsService'的引用 property'cryptoSettingsService';嵌套异常是 org.springframework.beans.factory.BeanCurrentlyInCreationException: 创建名为'cryptoSettingsService'的bean时出错:名称为Bean 'cryptoSettingsService'已经注入其他bean [jinnCryptoService,jinnCryptoServerService]作为其原始版本 一个循环引用,但最终被包裹。这意味着 说其他bean不使用bean的最终版本。这个 通常是过度渴望类型匹配的结果 - 考虑使用 'getBeanNamesOfType'与'allowEagerInit'标志关闭,for 示例
初看起来,jinnCryptoService
和jinnCryptoServerService
之间没有循环依赖关系。如果我像其他人一样使RmiServiceExporter
和partnershipPluginService
一样懒惰 - 上下文创建没有例外,但RMI不起作用。
那么,是否有任何方法可以让上下文和RMI工作?谢谢你帮助我,浪费你的时间。
答案 0 :(得分:0)
所以,我找到了解决方案。
我查看了上下文的邻域,并获得了一些像RmiServiceExporter
这样的bean的上下文。这种上下文不是懒惰的,并且在使用像partnershipPluginService
这样的bean的惰性上下文之后开始。
我将RmiServiceExporter
替换为新的上下文,问题就解决了。
如果您在我的位置,请从不同角度对问题进行一些调查,然后找到答案。
感谢所有读过这篇文章的人,试图帮助我。