ApplicationContext
ApplicationContext
基本功能和 beanFactory 相似,有具有負責讀取 Bean 與維護其依賴關係。
主要具備了一般企業開發所需要的功能。
Spring 作者 Rod Johnson 建議使用 ApplicationContext 來取代 BeanFactory。
在 BeanFactory 生命週期,ApplicationContext 會偵測並呼叫所有實作了
ApplicationContextAware
的 bean。
經常被使用的
FileSystemXmlApplicationContext
該容器從XML文件中加載已被定義的bean。你需要提供給構造器XML文件的完整路徑。
ClassPathXmlApplicationContext
只需正確配置 classpath 參數即可,會從 classpath 中搜索 bean 配置文件。
WebXmlApplicationContext
在Web應用程式中的檔案架構中讀取定義檔。
WebApplicationContext
繼承了 ApplicationContext 介面,在專為 web 應用程式的架構中,其為 Servlet 而設計。
與 ApplicationContext 不同,一個web應用程式可以有多個 WebApplicationContext。
1個 DispatcherServlet 擁有1個對應的 WebApplicationContext;
每個 DispatcherServlet 有自己的 xxx-servlet.xml 設定檔; 單個web應用程式是在web.xml檔裡,設定多個 DispatcherServlet 來負責處理request。
與 BeanFactory 兩者差異
BeanFactory
ApplicationContext
使用懶加載
使用即時加載
使用語法顯式加載(明確指定)對象
自己創建或管理資源對象
不支持國際化
支持國際化 / 發佈事件 / AOP 集成
不支持基於依賴的註解
支持基於依賴的註解
Springboot 的環境(2.2.X)
springboot 針對 web 環境會去判斷要使用哪一種版本,透過 SpringApplication.run() 查看。
無 Web
org.springframework. context.annotation.AnnotationConfigApplicationContext
Web
org.springframework. boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext
Reactive
org.springframework. boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext
主要都是透過 AnnotationConfigRegistry 來加載註解( @Annotation )。
參考資料
Last updated
Was this helpful?