DispatcherServlet中的Bean访问兄弟bean

时间:2012-12-14 16:05:02

标签: java spring servlets spring-mvc

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

<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。

但是,我们希望能够做的是访问兄弟 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>

我们如何从secondController内部访问 firstController,而无需将其作为构造函数arg传入,还是设置为属性?

我们正在使用WebApplicationContextUtils.getWebApplicationContext(...)来访问根applicationContext.xml中的兄弟节点,但我们希望在子上下文中执行相同的操作。 (来自其中一个孩子。)

1 个答案:

答案 0 :(得分:0)

您可以使用

获取ApplicationContext个对象

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

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

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