什么设置导致ContextLoaderListener(根上下文)成为父母' DispatcherServlet上下文的上下文?

时间:2017-03-10 15:41:46

标签: java spring rest spring-mvc servlets

首先出现这个问题,想知道我应该如何从ContextLoaderListener的应用程序上下文自动装配/注入服务层级bean INTO来自DispatcherServlet上下文的bean。

让我们说一个随机的简单情况,PuppyService需要在实际的资源/控制器级别上自动连接/注入PuppyResource。 Puppy服务以及Puppy Repository和任何Puppy实体都是bean从@Configuration类自动加载到root / ContextLoaderListener的上下文中,该类在其他包中执行组件扫描以获取bean并加载它们...

同时,Puppy RESOURCE将更多地位于webMvc级别并加载到DispatcherServlet的上下文中。

从我刚刚阅读的内容中,现在希望能够理解,根本上下文实际上是父母的内容' DispatcherServlet创建的上下文的上下文。这意味着生活在根上下文中的bean实际上可以自动装配/注入到由DispatcherServlet创建的上下文中的任何bean中。我实际上刚刚了解了这个嵌套'的概念。上下文。这准确吗?

如果这是准确的,那么配置设置在何处使根上下文成为父母'背景?目前,当我配置servlet / listener时,我是通过WebApplicationInitializer的自定义实现来完成的,其中我只创建了两个上下文,分别将它们加载到DispatcherServlet实例和ContextLoaderListener实例中,然后将每个上下文分别注册到servlet中。 。我在那里猜测某个地方,ContextLoaderListener的应用程序上下文自动设置为父母'。

有人可以简单解释一下吗?谢谢。

1 个答案:

答案 0 :(得分:0)

行为内置于DispatcherServlet。 javadoc定义了根应用程序上下文。

  

ContextLoaderListener加载的根应用程序上下文,   如果有的话,将被分享。

ContextLoaderListener的javadoc也声明了

  

Bootstrap监听器启动并关闭Spring的根WebApplicationContext

并且,假设您使用DispatcherServlet constructor that receives a WebApplicationContext

  

如果给定的上下文还没有父级,根   应用程序上下文将设置为父

你会自动得到这种行为。

再次来自javadoc,

  

此构造函数在Servlet 3.0+环境中非常有用   基于实例的servlet注册是可以通过   ServletContext.addServlet(java.lang.String, java.lang.String) API。

这是常见AbstractDispatcherServletInitializer用于设置Spring MVC应用程序的内容。