我有3个应用程序上下文:


从main()启动的全局上下文,负责启动Jetty servlet容器。
每个码头的webapp的applicationContext父级(由SpringSecurity开始
每个Web应用的n个xyz-servlet上下文(我运行1个Web应用)


Spring成功地为后两个上下文创建了父子关系。

现在,我想在第一个上下文中添加一个简单的全局属性服务,并使它对其他上下文可见(我可以将其添加到applicationContext中,但稍后可以在webapp上下文之外的其他地方使用它,并希望为此做计划)。

由于我没有管理其他两个上下文的创建(它们是由调度程序servlet和spring security创建的,它们是从web.xml启动的),因此我不清楚应该如何以及在何处访问它们以将第一个定义为父级(好吧,只有applicationContext应该将全局上下文作为其父级)。

最佳答案

(1)和(2)之间的父子关系可以由ContextLoaderListener中的web.xml管理。

具体来说,请看javadoc for ContextLoader.loadParentContext()。这记录了ContextLoaderListener如何定位上下文(1)。它假定此全局上下文是通过ContextSingletonBeanFactoryLocator初始化的,您可能已经或未曾使用它创建该上下文。

如果您确实使用了ContextSingletonBeanFactoryLocator,那么它应该很简单,只需遵循javadoc中的说明即可。如果您使用其他引导全局上下文的方法,则可以将ContextLoaderListener子类化,重写loadParentContext()方法以定位全局上下文,然后在web.xml中而不是标准ContextLoaderListener中使用它。

09-30 17:04
查看更多