Spring 上下文层次结构与 Web 应用程序上下文
我正在处理一个使用 DispatcherServlet
引导的 Spring MVC Web 应用程序。它创建一个管理整个应用程序的 XmlWebApplicationContext
:
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
现在有一些模块应该在运行时使用 ContextSingletonBeanFactoryLocator
加载。因此,每个模块都有自己的ClasspathXmlApplicationContext
。为了使模块可以从 XmlWebApplicationContext
引用 beans,它应该附加到 XmlWebApplicationContext
以形成一个上下文层次结构,其中 XmlWebApplicationContext
应该扮演父上下文的角色和模块的 ClasspathXmlApplicationContext
子上下文的角色。不幸的是,我无法使用连接它们,
<beans>
<bean id="moduleContext"
class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
...
</constructor-arg>
<constructor-arg ref="parentContext" />
</bean>
</beans>
因为到目前为止我还没有找到为 WebApplicationContext
命名 parentContext
的方法。我是否忽略了某些事情,或者是否有更好/更简单的方法以不同的方式实现相同的目标?
I'm dealing with a Spring MVC web app that's bootstrapped using a DispatcherServlet
. It creates a XmlWebApplicationContext
which manages the whole application:
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Now there are some modules that should be loaded at runtime using a ContextSingletonBeanFactoryLocator
. Therefore every module has its own ClasspathXmlApplicationContext
. So that a module could reference beans from the XmlWebApplicationContext
, it should be attached to the XmlWebApplicationContext
to form a Context Hierarchy wherein the XmlWebApplicationContext
should play the role of the parent and the ClasspathXmlApplicationContext
of the module the role of the child context. Unfortunately I'm unable to connect them using
<beans>
<bean id="moduleContext"
class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
...
</constructor-arg>
<constructor-arg ref="parentContext" />
</bean>
</beans>
because I've found no way so far to give the WebApplicationContext
the name parentContext
. Have I overlooked something or is there a better/easier way to achieve the same in a different fashion?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您正在使用注释,您可以这样做:
您也可以在没有注释的情况下通过使用接口 InitializingBean 和 ApplicationContextAware 来完成此操作。
已编辑:
childs
按类型自动装配,因此 Spring 将注入作为 ClassPathXmlApplicationContext 实例的所有 bean。If you are using annotations, you can do this:
You can do it without annotations too, by using the interfaces InitializingBean and ApplicationContextAware.
Edited:
childs
is autowired by type, so Spring will inject all the bean that are being an instance of ClassPathXmlApplicationContext.