Java 我可以用lazy init使用RmiServiceExporter吗?

Java 我可以用lazy init使用RmiServiceExporter吗?,java,spring,lazy-loading,rmi,Java,Spring,Lazy Loading,Rmi,我有一个遗留项目,在几个上下文中有很多bean。bean之间似乎存在循环依赖关系,这就是为什么大多数上下文都将defaultlazyinit设置为true 我需要通过RMI导出一些bean,因此我在上下文中有以下声明: <bean id="partnershipPluginService" class="com.otr.sufd.services.security.PartnershipPluginServiceImpl" lazy-init="false"> <pro

我有一个遗留项目,在几个上下文中有很多bean。bean之间似乎存在循环依赖关系,这就是为什么大多数上下文都将
defaultlazyinit
设置为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”的引用 属性“cryptoSettingsService”;嵌套异常是 org.springframework.beans.factory.beancurrentlyIncrementationException: 创建名为“cryptoSettingsService”的bean时出错:名为 “cryptoSettingsService”已注入到其他bean中 [JinCryptoservice,JinCryptoserverService]在其原始版本中作为 循环引用,但最终已被包装。这意味着 也就是说,其他bean不使用bean的最终版本。这 往往是过度热切类型匹配的结果-考虑使用 例如,禁用了“allowEagerInit”标志的“getBeanNamesOfType” 例如

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

所以,我找到了一个解决办法。 我查看了context的邻居,得到了一些带有bean的context,比如
RmiServiceExporter
。上下文不是惰性的,而是在惰性上下文之后开始使用bean,比如
partnershipPluginService
。 我将
RmiServiceExporter
替换到新的上下文中,问题就解决了

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

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