我有两个弹簧上下文,我需要在它们中使用相同的bean。有没有办法在两个上下文之间共享bean而不创建父上下文?
答案 0 :(得分:2)
我不认为你想要的是一个好主意。如果你在两个上下文中有相同的 bean,那么哪个上下文管理bean的生命周期?通过让一个共同的父拥有bean,你有一个明确的,对这个重要问题的明确回答:bean属于父上下文。
现在,如果您知道bean将属于上下文A并且只想将它们绑定到上下文B中的某个名称,我想您可能会破解某些" guest"豆工厂或其他什么,它们的确如下:
爪哇:
public class GuestBeanFactory {
private ApplicationContext guestBeanContext;
@Inject
public void setGuestBeanContext(ApplicationContext guestBeanContext) {
this.guestBeanContext = guestBeanContext;
}
private String guestBeanName;
@Inject
public void setGuestBeanName(String guestBeanName) {
this.guestBeanName = guestBeanName;
}
public Object getBean() {
return guestBeanContext.getBean(guestBeanName);
}
}
的applicationContext.xml:
<beans ...>
...
<bean id="myGuestFactory" class="GuestBeanFactory" scope="singleton">
<property name="guestBeanContext" ref="...get a reference to the guest bean and inject it here" />
<property name="guestBeanName" value="name-of-this-bean-inside-guestBeanContext"/>
</bean>
<bean id="myGuestBean" factory-bean="myGuestFactory" factory-method="getBean"/>
...
</beans>
这样,guestBeanContext
管理name-of-this-bean-inside-guestBeanContext
,但&#34;主机&#34;} context可以使用名称myGuestBean
访问该bean。