我有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
中使用它。