1

我有一个 spring-mvc 应用程序,它通过<context:component-scan base-package="com.example.app" />DispatcherServlet上下文配置中使用自动装配 bean。

我现在有一种情况,我希望从非 bean 类访问服务 bean,特别是RequestContextAwareTag实现。

我可以访问在根上下文中注册的 bean,如下所示:

ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(
      pageContext.getSession().getServletContext());
MyService svc = ctx.getBean(MyService.class);

如果 bean 在调度程序上下文中注册,我会得到一个NoSuchBeanDefinitionException.

如果可能的话,我实际上更希望我的@Servicebean 在根上下文中注册而不@Controller拾取 bean,然后@Controller在调度程序上下文中拾取 bean。问题<context:component-scan/>在于它两者兼而有之。

如果这不可能,我需要一种方法来访问调度ApplicationContext程序以检索服务 bean。

任何指导将不胜感激。

4

1 回答 1

2

我已经设法通过使用和拆分两种component-scan配置来解决这个问题。exclude-filterinclude-filter

根上下文:

<context:component-scan  base-package="com.example.app">
  <context:exclude-filter
    expression="org.springframework.stereotype.Controller"
    type="annotation"/>
</context:component-scan>

servlet 上下文:

<mvc:annotation-driven/>
<context:component-scan  base-package="com.example.app">
  <context:include-filter
    expression="org.springframework.stereotype.Controller"
    type="annotation"/>
</context:component-scan>
于 2013-05-21T09:31:48.220 回答