代码之家  ›  专栏  ›  技术社区  ›  gooamoko

我可以用lazy init使用RmiServiceExporter吗?

  •  0
  • gooamoko  · 技术社区  · 6 年前

    我有一个遗留项目,在多个上下文中有很多bean。看起来bean之间存在循环依赖关系,这就是为什么大多数上下文 default-lazy-init 设置为 符合事实的

    我需要通过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都声明为 不懒惰 .I thibk,够了,至少声明一个 RmiServiceExporter 像不懒惰的人一样有同样的行为。 这种配置有一个很大的缺点。它不起作用。我在上下文创建过程中遇到异常

    组织。springframework。豆子。工厂BeanCreationException:错误 正在创建名为“partnershipSystemPluginService”的bean,定义于 类路径资源 [安全/服务器安全服务(security/serverSecurityServices.xml)]:无法 设置bean时解析对bean“cryptoSettingsService”的引用 属性“cryptoSettingsService”;嵌套异常为 组织。springframework。豆子。工厂BeanCurrentlyInCreationException(当前增量异常): 创建名为“cryptoSettingsService”的bean时出错:名为 “cryptoSettingsService”已注入其他bean [JinCryptoservice,JinCryptoserverService]原始版本的一部分 循环引用,但最终已被包装。这意味着 也就是说,其他bean不使用bean的最终版本。这 通常是过度渴望类型匹配的结果-请考虑使用 “getBeanNamesOfType”和“allowEagerInit”标志已关闭,用于 实例

    乍一看,两者之间没有循环依赖关系 jinnCryptoService jinnCryptoServerService .如果我两者都做 RmiServiceExporter partnershipPluginService 像其他人一样懒惰——上下文无一例外地创建,但RMI不起作用。 那么,有什么方法可以让上下文和RMI工作吗?谢谢你帮助我,浪费了你的时间。

    1 回复  |  直到 6 年前
        1
  •  0
  •   gooamoko    6 年前

    所以,我找到了一个解决方案。 我找了一下context的邻居,得到了一些与Bean类似的context RmiServiceExporter 。该上下文不是懒惰的,在懒惰的上下文之后开始使用bean,如 partnershipPluginService 。 我替换了 RmiServiceExporter 进入新的环境,问题就解决了。

    如果你愿意站在我的立场上,请从不同的角度看一下这个问题,你就会找到答案。

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