Spring 簡介
Spring 是一個開源輕量級企業應用架構,目的是為了簡化企業級應用開發。(1)Spring 架構可以幫我們管理對象的生命周期,幫助我們管理對象間的依賴關系,互相協作;(2)Spring 架構提供了一種能力,幫助抽離日志,異常處理,性能統計,安全性以及資料庫事務管理等,這些均可以與業務子產品分離, 這些得益于Spring面向切面的特性。
Spring 特點
- 輕量: api簡單,很少配置
- Bean: 專注于寫業務的簡單java類
- 松耦合: AOP,容器,DI等
- 萬能膠: 友善與其他架構整合
- 設計模式: 經典設計模式
Spring 核心特性
- DI
- AOP
Spring 初衷和使命
簡化開發 (這點很重要)
- 面向Bean 基于POJO的輕量級和最小侵入性程式設計;
專注于業務代碼編寫,所有業務類定義均為普通java類(POJO).
- DI及面向接口實作松耦合;
依賴注入: 和容器結合,由容器管理對象的建立和生命周期;DI隻描述對象的建立方式,不負責建立. org.srpingframework.beans包是設計的核心(架構核心是org.springframework.core),BeanFacotry接口是工廠設計模式的實作,支援多種方式建立和檢索對象,也可以管理對象間關系. BeanFactory支援兩種對象模型: 1. 單例: Singleton 2. 原型: 每次檢索建立單獨的對象 Bean 工廠的概念是Spring作為IOC容器的基礎.IOC将處理對象的職責從應用程式代碼轉移到架構.
- 基于切面和慣例進行聲明式程式設計;
AOP是一種程式設計思想; 子產品化關注點的行為; AOP是IOC的補充性技術; 實作了松耦合; AOP核心構造是切面,是規則的定義;
- 通過切面和模闆減少模闆化代碼
Tempate method 設計模式的使用, 比如JdbcTemplate類, 簡化了資料庫操作的重複代碼(建立連接配接,準備語句,清理,關閉連接配接,異常捕獲等), 讓程式員隻關注要執行的語句.
容器
容器通過DI管理Spring應用的對象. 管理對象的建立,依賴關系,配置群組裝. Spring中的容器有多種, 大緻可以分為BeanFactory工廠類和ApplicationContext應用上下文兩大類. BeanFactory 提供了基本的DI支援, ApplicationContext基于BeanFactory建構, 提供應用架構級别的服務.
Bean的生命周期
- bean執行個體化
- bean注入屬性
- 調用BeanNameAware.setBeanName()
- 調用BeanFactoryAware.setBeanFactory()方法
- 調用ApplicatioonContextAware.setApplicationContext()方法
- 調用BeanPostProcessor.postProcessBeforeInitializaion()方法
- 調用InitializingBean.afterPropertiesSet()方法,如果使用init-method聲明了初始化方法,則也會調用初始化方法
- 調用BeanPostProcessor.postProcessAfterInitialization()方法
- bean就緒,存在上下文中
- 調用DisposableBean.destroy()方法, 如果destroy-method方法被聲明, 也同時調用
AOP 使用場景
- Authentication 權限認證
- Logging 日志
- Transaction 事務
- Lazy Loading 懶加載
- Context Process 上下文處理
- Error Handler 錯誤跟蹤
- Cache 緩存
體系結構
該圖取自
- 核心容器: Spring最核心的部分, 除了提供應用程式上下文,還提供了許多企業服務(郵件,JNDI,EJB內建);
- AOP;
- 資料通路和內建: jdbc(模闆方法),orm,transaction,jms(java message service),oxm(Object-to-XML-Mapping);
- Web與遠端調用: MVC
- Instrument : 為tomcat提供織入代理功能, 用的比較少
- Test