我们的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
中的兄弟节点,但我们希望在子上下文中执行相同的操作。 (来自其中一个孩子。)
答案 0 :(得分:0)
您可以使用
获取ApplicationContext
个对象
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dispatcher-servlet.xml")
这假设dispatcher-servlet.xml
在类路径中。上下文对象必须被缓存。
然后使用context.getBean()
从任何位置访问bean。
其他选项似乎是,使用重载方法,我们可以传递上下文属性名称。我没用过它。
WebApplicationContextUtils.getWebApplicationContext(ServletContext sc, String attrName)