天天看點

Spring系列(一) Spring的核心

Spring 簡介

Spring 是一個開源輕量級企業應用架構,目的是為了簡化企業級應用開發。(1)Spring 架構可以幫我們管理對象的生命周期,幫助我們管理對象間的依賴關系,互相協作;(2)Spring 架構提供了一種能力,幫助抽離日志,異常處理,性能統計,安全性以及資料庫事務管理等,這些均可以與業務子產品分離, 這些得益于Spring面向切面的特性。

Spring 特點

  1. 輕量: api簡單,很少配置
  2. Bean: 專注于寫業務的簡單java類
  3. 松耦合: AOP,容器,DI等
  4. 萬能膠: 友善與其他架構整合
  5. 設計模式: 經典設計模式

Spring 核心特性

  1. DI
  2. AOP

Spring 初衷和使命

簡化開發 (這點很重要)

  1. 面向Bean 基于POJO的輕量級和最小侵入性程式設計;
    專注于業務代碼編寫,所有業務類定義均為普通java類(POJO).           
  2. DI及面向接口實作松耦合;
    依賴注入: 和容器結合,由容器管理對象的建立和生命周期;DI隻描述對象的建立方式,不負責建立.
     org.srpingframework.beans包是設計的核心(架構核心是org.springframework.core),BeanFacotry接口是工廠設計模式的實作,支援多種方式建立和檢索對象,也可以管理對象間關系.
     BeanFactory支援兩種對象模型:
             1. 單例: Singleton
             2. 原型: 每次檢索建立單獨的對象
     Bean 工廠的概念是Spring作為IOC容器的基礎.IOC将處理對象的職責從應用程式代碼轉移到架構.           
  3. 基于切面和慣例進行聲明式程式設計;
    AOP是一種程式設計思想;
     子產品化關注點的行為;
     AOP是IOC的補充性技術;
     實作了松耦合;
     AOP核心構造是切面,是規則的定義;           
  4. 通過切面和模闆減少模闆化代碼
    Tempate method 設計模式的使用, 比如JdbcTemplate類, 簡化了資料庫操作的重複代碼(建立連接配接,準備語句,清理,關閉連接配接,異常捕獲等), 讓程式員隻關注要執行的語句.           

容器

容器通過DI管理Spring應用的對象. 管理對象的建立,依賴關系,配置群組裝. Spring中的容器有多種, 大緻可以分為BeanFactory工廠類和ApplicationContext應用上下文兩大類. BeanFactory 提供了基本的DI支援, ApplicationContext基于BeanFactory建構, 提供應用架構級别的服務.

Bean的生命周期

  1. bean執行個體化
  2. bean注入屬性
  3. 調用BeanNameAware.setBeanName()
  4. 調用BeanFactoryAware.setBeanFactory()方法
  5. 調用ApplicatioonContextAware.setApplicationContext()方法
  6. 調用BeanPostProcessor.postProcessBeforeInitializaion()方法
  7. 調用InitializingBean.afterPropertiesSet()方法,如果使用init-method聲明了初始化方法,則也會調用初始化方法
  8. 調用BeanPostProcessor.postProcessAfterInitialization()方法
  9. bean就緒,存在上下文中
  10. 調用DisposableBean.destroy()方法, 如果destroy-method方法被聲明, 也同時調用

AOP 使用場景

  1. Authentication 權限認證
  2. Logging 日志
  3. Transaction 事務
  4. Lazy Loading 懶加載
  5. Context Process 上下文處理
  6. Error Handler 錯誤跟蹤
  7. Cache 緩存

體系結構

Spring系列(一) Spring的核心

該圖取自

  1. 核心容器: Spring最核心的部分, 除了提供應用程式上下文,還提供了許多企業服務(郵件,JNDI,EJB內建);
  2. AOP;
  3. 資料通路和內建: jdbc(模闆方法),orm,transaction,jms(java message service),oxm(Object-to-XML-Mapping);
  4. Web與遠端調用: MVC
  5. Instrument : 為tomcat提供織入代理功能, 用的比較少
  6. Test