【问题标题】:How do you share Spring beans between different Spring contexts?你如何在不同的 Spring 上下文之间共享 Spring bean?
【发布时间】:2012-04-26 18:21:35
【问题描述】:

我们有一个使用 Spring BlazeDS 集成的应用程序。到目前为止,我们一直在使用 Spring 和 Flex,并且运行良好。我们现在还需要添加一些 Spring MVC 控制器。 Spring BlazeDS 文档指出,这样做的方法是在 web.xml 中声明两个单独的上下文,如下所示:

<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 共享? 谢谢 !

【问题讨论】:

    标签: spring spring-mvc blazeds


    【解决方案1】:

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

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

    如果您使用&lt;component-scan&gt;,请确保您不会意外地将类扫描到多个上下文中。看我的回答here

    【讨论】:

    • “不小心将类扫描到多个上下文中是一个关键点”这里。谢谢!
    【解决方案2】:

    将此添加到您的 web.xml:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2019-08-20
      • 2018-01-11
      相关资源
      最近更新 更多