【发布时间】:2013-05-21 07:36:32
【问题描述】:
我有一个 spring-mvc 应用程序,它在 DispatcherServlet 上下文配置中使用 <context:component-scan base-package="com.example.app" /> 自动装配 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/> 的问题在于它同时兼顾了两者。
如果这不可能,我需要一种方法来访问调度程序 ApplicationContext 以检索服务 bean。
非常感谢任何指导。
【问题讨论】:
-
您是否尝试过在您的 bean 配置文件中实现 ApplicationContextAware 并实例化该类?
-
不幸的是,对于标签来说这是不可能的,因为它们是在使用标签的每个页面请求上创建的。
标签: java spring spring-mvc