首先,我想知道如何将ContextLoaderListener的应用程序上下文中的服务层级bean从DispatcherServlet上下文中注入到bean中。
假设在一个随机的简单情况下,PuppyService需要在实际的资源/控制器级别上自动注入/注入到PuppyResource中。Puppy、Puppy和任何Puppy实体都是bean,它们将自动加载到根/ContextLoaderListener的上下文中,由@ContextLoaderListener从@ContextLoaderListener类中进行组件扫描,以获取bean并加载它们.
同时,Puppy资源将更多地放在webMvc级别上,并加载到DispatcherServlet的上下文中。
根据我刚才所读到的,并且现在希望理解的是,根上下文实际上是DispatcherServlet创建的上下文的“父”上下文。这意味着根上下文中的bean实际上可以被自动/注入到由DispatcherServlet创建的上下文中的任何bean中。我刚刚从字面上了解了“嵌套”上下文的概念。这个准确吗?
如果这是准确的,那么配置在哪里被设置为使根上下文成为“父”上下文?目前,当我配置servlet/listener时,我通过WebApplicationInitializer的自定义实现来实现它,其中我只需创建两个上下文,分别将它们分别加载到一个DispatcherServlet实例和一个ContextLoaderListener实例中,然后分别将它们分别注册到servlet中。我猜在其中某个地方,ContextLoaderListener的应用程序上下文会自动设置为“父”。
有人能简单解释一下吗?谢谢。
发布于 2017-03-10 16:17:35
行为是内置在DispatcherServlet
中的。javadoc定义根应用程序上下文。
只有
ContextLoaderListener
加载的根应用程序上下文(如果有的话)才会被共享。
ContextLoaderListener
的javadoc还声明
引导侦听器启动并关闭Spring的根
WebApplicationContext
。
假设你使用了WebApplicationContext
,
如果给定的上下文还没有父上下文,则根应用程序上下文将被设置为父。
你会自动得到这种行为。
同样来自javadoc,
这个构造函数在Servlet 3.0+环境中很有用,在这种环境中,可以通过Servlet API注册基于实例的Servlet。
这就是普通的AbstractDispatcherServletInitializer
用来设置Spring应用程序的东西。
https://stackoverflow.com/questions/42722299
复制相似问题