我可以使用 lazy-init 运行 RmiServiceExporter 吗?
Can I get working RmiServiceExporter with lazy-init?
我有一个遗留项目,在几个上下文中有很多 beans。似乎 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 都声明为非惰性。我认为,足以将至少一个 RmiServiceExporter
声明为非懒惰以具有相同的行为。
在这种配置中有一个很大的缺点。它不起作用。我在上下文创建过程中遇到异常
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'partnershipSystemPluginService' defined in
class path resource
[security/serverSecurityServices.xml]: Cannot
resolve reference to bean 'cryptoSettingsService' while setting bean
property 'cryptoSettingsService'; nested exception is
org.springframework.beans.factory.BeanCurrentlyInCreationException:
Error creating bean with name 'cryptoSettingsService': Bean with name
'cryptoSettingsService' has been injected into other beans
[jinnCryptoService,jinnCryptoServerService] in its raw version as part
of a circular reference, but has eventually been wrapped. This means
that said other beans do not use the final version of the bean. This
is often the result of over-eager type matching - consider using
'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for
example.
乍一看,jinnCryptoService
和jinnCryptoServerService
之间没有循环依赖。如果我让 RmiServiceExporter
和 partnershipPluginService
像其他人一样懒惰 - 上下文创建无一例外,但 RMI 不起作用。
那么,有什么方法可以使上下文和 RMI 正常工作吗?感谢您帮助我并浪费您的时间。
所以,我找到了解决办法。
我查看了上下文的邻域,并得到了一些带有像 RmiServiceExporter
这样的 bean 的上下文。该上下文不是惰性的,并且在具有像 partnershipPluginService
这样的 bean 的惰性上下文之后开始。
我将 RmiServiceExporter
替换为新的上下文,问题就解决了。
如果你和我一样,请从不同的角度看问题,然后找到答案。
感谢所有阅读本文 post 并试图帮助我的人。
我有一个遗留项目,在几个上下文中有很多 beans。似乎 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 都声明为非惰性。我认为,足以将至少一个 RmiServiceExporter
声明为非懒惰以具有相同的行为。
在这种配置中有一个很大的缺点。它不起作用。我在上下文创建过程中遇到异常
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'partnershipSystemPluginService' defined in class path resource [security/serverSecurityServices.xml]: Cannot resolve reference to bean 'cryptoSettingsService' while setting bean property 'cryptoSettingsService'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'cryptoSettingsService': Bean with name 'cryptoSettingsService' has been injected into other beans [jinnCryptoService,jinnCryptoServerService] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.
乍一看,jinnCryptoService
和jinnCryptoServerService
之间没有循环依赖。如果我让 RmiServiceExporter
和 partnershipPluginService
像其他人一样懒惰 - 上下文创建无一例外,但 RMI 不起作用。
那么,有什么方法可以使上下文和 RMI 正常工作吗?感谢您帮助我并浪费您的时间。
所以,我找到了解决办法。
我查看了上下文的邻域,并得到了一些带有像 RmiServiceExporter
这样的 bean 的上下文。该上下文不是惰性的,并且在具有像 partnershipPluginService
这样的 bean 的惰性上下文之后开始。
我将 RmiServiceExporter
替换为新的上下文,问题就解决了。
如果你和我一样,请从不同的角度看问题,然后找到答案。
感谢所有阅读本文 post 并试图帮助我的人。