如何在两个不同的弹簧环境中使用相同的bean?

时间:2014-07-21 16:01:07

标签: spring

我有两个弹簧上下文,我需要在它们中使用相同的bean。有没有办法在两个上下文之间共享bean而不创建父上下文?

1 个答案:

答案 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。