Java 我可以用lazy init使用RmiServiceExporter吗?
我有一个遗留项目,在几个上下文中有很多bean。bean之间似乎存在循环依赖关系,这就是为什么大多数上下文都将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
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
替换到新的上下文中,问题就解决了
如果你愿意站在我的立场上,请从不同的角度看一下这个问题,你会找到答案的
感谢所有读过这篇文章,试图帮助我的人