首先出现这个问题,想知道我应该如何从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的应用程序上下文自动设置为父母'。
有人可以简单解释一下吗?谢谢。
答案 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应用程序的内容。