你如何在不同的Spring上下文之间共享Spring bean?

时间:2012-04-26 18:21:35

标签: spring spring-mvc blazeds

我们有一个使用Spring BlazeDS集成的应用程序。到目前为止,我们刚刚使用Spring和Flex,它运行良好。我们现在需要添加一些Spring MVC控制器。 Spring BlazeDS文档指出,执行此操作的方法是在 web.xml 中声明两个sperate上下文,如下所示:

<servlet>
    <servlet-name>flex</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>flex</servlet-name>
    <url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring-mvc</servlet-name>
    <url-pattern>/spring/*</url-pattern>
</servlet-mapping> 

这是我的问题:在两种情况下都需要使用Spring bean - spring-mvc 一个和 flex 一个。如何做到这一点 - 如何在一个上下文中声明一个bean(在xml中或通过组件扫描)并允许它与在其他上下文中声明的bean共享? 谢谢 !

2 个答案:

答案 0 :(得分:7)

使用ContextLoaderListener创建父上下文。 DispatcherServlet上下文将自动成为该上下文的子项。

在父上下文中创建共享bean,并在子上下文中的bean中引用它们。

如果您使用<component-scan>,请确保不会意外地将类扫描到多个上下文中。请参阅我的回答here

答案 1 :(得分:1)

将此添加到您的web.xml:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/YOUR_APP_CONTEXT.xml</param-value>
</context-param>

通过扫描和直接定义定义的两个bean都可用于BlazeDS和SpringMVC端点。