【问题标题】:Bean in DispatcherServlet accessing sibling beanDispatcherServlet 中的 Bean 访问同级 bean
【发布时间】:2012-12-14 16:05:02
【问题描述】:

我们有一个 web 应用程序,它在 web.xml 中定义了一个根应用程序上下文 (applicationContext.xml) 和一个调度程序 servlet (dispatcher-servlet.xml),如下所示:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

...

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

由于访问限制,我们显然无法从根父上下文访问任何 DispatcherServlet bean。

但是,我们希望能够做的事情是访问 sibling bean。例如,在我们的dispatcher-servlet.xml 中,我们有:

<bean id="firstController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
    ...
</bean>

<bean id="secondController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
...
</bean>

我们如何才能从firstController 内部访问secondController,而不需要将其作为构造函数参数传入或设置为属性?

我们使用WebApplicationContextUtils.getWebApplicationContext(...) 来访问根applicationContext.xml 中的兄弟姐妹,但我们想在子上下文中做同样的事情。 (来自其中一个孩子。)

【问题讨论】:

  • 什么是春季版?你可以使用@Autowired 吗?

标签: java spring servlets spring-mvc


【解决方案1】:

您可以使用

获取ApplicationContext 对象

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dispatcher-servlet.xml")

这是假设dispatcher-servlet.xml 在类路径中。上下文对象必须被缓存。 然后使用context.getBean() 从任何地方访问bean。

其他选项似乎是,使用重载方法,我们可以传递上下文属性名称。我没用过。 WebApplicationContextUtils.getWebApplicationContext(ServletContext sc, String attrName)

【讨论】:

  • 谢谢!我最终只使用了 @Autowired 并将其作为 ivar 保留,但将来我会检查额外参数的 getWebApplicationContext()
猜你喜欢
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
相关资源
最近更新 更多