2017-03-10 25 views
1

首先,我想知道我應該如何從ContextLoaderListener的應用程序上下文INTO一個來自DispatcherServlet上下文的bean自動注入/注入服務層級bean。什麼設置會導致ContextLoaderListener(根上下文)成爲DispatcherServlet上下文上的「父」上下文?

比方說,對於一個隨機的簡單情況,PuppyService需要在實際資源/控制器級別上自動裝入/注入PuppyResource。 Puppy服務以及Puppy Repository和任何Puppy Entities都是從@Configuration類自動加載到根/ ContextLoaderListener上下文中的bean,它在一些其他包中執行組件掃描以獲取bean並加載它們...

與此同時,Puppy RESOURCE將更多地放在webMvc級別上並加載到DispatcherServlet的上下文中。

根據我剛剛閱讀的內容以及現在希望理解的內容,根上下文實際上是由DispatcherServlet創建的上下文的「父」上下文。這意味着位於根上下文內的bean實際上可以被自動裝入/注入到由DispatcherServlet創建的上下文內的任何bean中。我從字面上理解了這種'嵌套'上下文的概念。這是否準確?

如果這是準確的,那麼配置的設置將根環境設置爲「父」環境?目前,當我配置servlet/listener時,我通過WebApplicationInitializer的自定義實現來完成它,其中我只創建兩個上下文,分別將它們分別加載到DispatcherServlet實例和ContextLoaderListener實例中,然後將每個實例分別註冊到servlet 。我在那裏猜測,ContextLoaderListener的應用程序上下文自動被設置爲「父」。

有人可以簡單解釋一下嗎?謝謝。

回答

0

該行爲內置於DispatcherServlet中。 javadoc定義了根應用程序上下文。

只是作爲加載由ContextLoaderListener, 如果任何根應用上下文中,將被共享。

ContextLoaderListener的Javadoc還指出

引導聽者啓動和關閉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應用程序。

+0

我有什麼問題嗎? –

相關問題