我可以使用lazy-init来使用RmiServiceExporter吗?

时间:2018-04-25 09:00:48

标签: java spring lazy-loading rmi

我在几个环境中都有很多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   示例

初看起来,jinnCryptoServicejinnCryptoServerService之间没有循环依赖关系。如果我像其他人一样使RmiServiceExporterpartnershipPluginService一样懒惰 - 上下文创建没有例外,但RMI不起作用。 那么,是否有任何方法可以让上下文和RMI工作?谢谢你帮助我,浪费你的时间。

1 个答案:

答案 0 :(得分:0)

所以,我找到了解决方案。 我查看了上下文的邻域,并获得了一些像RmiServiceExporter这样的bean的上下文。这种上下文不是懒惰的,并且在使用像partnershipPluginService这样的bean的惰性上下文之后开始。 我将RmiServiceExporter替换为新的上下文,问题就解决了。

如果您在我的位置,请从不同角度对问题进行一些调查,然后找到答案。

感谢所有读过这篇文章的人,试图帮助我。