我们有一个使用 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 共享?谢谢!
使用 ContextLoaderListener 创建父上下文。 DispatcherServlet
上下文将自动成为该上下文的子级。
在父上下文中创建共享的 Bean,并在子上下文中的 Bean 中引用它们。
如果您正在使用<component-scan>
请确保不会意外地将类扫描到多个上下文中。 在这里看到我的答案。
将此添加到您的网站.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/YOUR_APP_CONTEXT.xml</param-value>
</context-param>
通过扫描和直接定义定义的 bean 都将可用于您的 BlazeDS 和 SpringMVC 端点。