首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring 3.x 核心:IoC 容器體系深度解析與三大上下文對比

     編輯:Java 綜合教學

IoC 本質:控制權的轉移

  • 控制:對象創建、依賴賦值、生命周期管理的決策權。
  • 反轉:從「調用者主動 new/查找依賴」轉為「容器自動注入依賴」,實現依賴倒置(DIP)。

Spring 三大核心接口架構

接口定位初始化策略BeanPostProcessor 註冊典型初始化方式
BeanFactory 框架內部基礎設施,面向 Spring 本身 延遲加載:首次 getBean() 才實例化 手動代碼註冊 addBeanPostProcessor() new XmlBeanFactory(new ClassPathResource("beans.xml"))
ApplicationContext 面向應用開發者,企業級首選 啟動時預實例化所有單例 Bean 自動掃描 @Component、@Bean、XML 中的 processor bean new ClassPathXmlApplicationContext("beans.xml")
new AnnotationConfigApplicationContext(AppConfig.class)
WebApplicationContext Web 環境專用,綁定 ServletContext 依賴 Web 容器啟動,通過 Listener/Servlet 引導 繼承 ApplicationContext 能力,額外支持 Web 作用域 ContextLoaderListener 在 web.xml 配置

Resource & ResourceLoader:資源訪問的統一抽象

  • Resource 接口:封裝 classpath:、file:、http:、servletContext: 等各類資源,提供 getInputStream()、exists()、getFile() 統一 API。
  • ResourceLoader 策略模式:getResource(String location) 根據前綴自動選擇 ClassPathResource、FileSystemResource、ServletContextResource 等實現,上層無感知具體存儲介質。

Bean 生命周期擴展點

  1. XML 方式:<bean init-method="init" destroy-method="cleanup">
  2. 註解方式:@PostConstruct / @PreDestroy(需 InitDestroyAnnotationBeanPostProcessor,Context 自動註冊)。
  3. 接口回調:實現 InitializingBean/DisposableBean(強耦合 Spring,不推薦)。

Web 環境啟動鏈路補充

<!-- web.xml -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Log4j 啟動順序需早於 ContextLoaderListener -->
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

關鍵點:load-on-startup 確保 Log4j 配置先於 Spring 容器初始化生效。

思維導圖速覽

Spring IoC 核心體系思維導圖

總結

理解 BeanFactory vs ApplicationContext 的初始化時機差異、Resource 抽象 解耦存儲細節、WebApplicationContext 與 Servlet 生命周期綁定,是掌握 Spring IoC 容器精髓的三把鑰匙。實際開發中 99% 場景直接使用 AnnotationConfigApplicationContext 或 Spring Boot 自動配置,手動操作 BeanFactory 僅出現在框架擴展或測試場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved