我有一个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
。
如果可能的话,我实际上更愿意在根上下文中注册我的@Service
bean而不选择@Controller
bean,然后在@Controller
bean中选择<context:component-scan/>
个bean。调度员背景。 ApplicationContext
的问题在于它同时存在。
如果无法做到这一点,我需要一种方法来访问调度程序{{1}}以检索服务bean。
非常感谢任何指导。
答案 0 :(得分:2)
我已设法通过使用component-scan
和exclude-filter
分割两个include-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>