1. 程式人生 > >Spring的父子容器管理

Spring的父子容器管理

在Spring整體框架的核心概念中,容器是核心思想,就是用來管理Bean的整個生命週期的,而在一個專案中,容器不一定只有一個,Spring中可以包括多個容器,而且容器有上下層關係,目前最常見的一種場景就是在一個專案中引入Spring和SpringMVC這兩個框架,那麼它其實就是兩個容器,Spring是父容器,SpringMVC是其子容器,並且在Spring父容器中註冊的Bean對於SpringMVC容器中是可見的,而在SpringMVC容器中註冊的Bean對於Spring父容器中是不可見的,也就是子容器可以看見父容器中的註冊的Bean,反之就不行。

 

原理:因為spring容器和spring-mvc是父子容器。在伺服器啟動時,會先載入web.xml配置檔案 ==> 再載入spring配置檔案 ==> 再回到web.xml【載入監聽器;載入過濾器;載入前端控制器】==>再載入springMVC配置檔案

在Spring配置檔案中,我們掃描註冊的是service實現類,就算掃描註冊了controller 也會在後面載入SpringMVC配置檔案[掃描註冊controller]覆蓋掉,所以想要在controller中實現事務管理,僅在spring配置檔案配置<tx:annotation-driven>或<aop:config>是沒有效果的,必須將事務配置定義在Spring MVC的應用上下文(spring-mvc.xml)中
 

因為在spring-framework-reference.pdf文件中說明了:                                                                                                                                     <tx:annoation-driven/>只會查詢和它在相同的應用上下檔案中定義的bean上面的
也就是說我的spring-mvc中的掃描這個controller層,中的類,和我的事務要配置在統一應用容器上下文中。

geso各司其職,分而治之的思想。