spring framework -- 整體架構

Spring 框架的官方圖片

  這張圖信息頗有限, 只是描述了下spring 框架的modules, java

核心部分

  1. Beans
  2. core
  3. context
  4. Expression Language

官方描述 

Core 和 Beans 兩個模塊 提供了框架的基本支持, 主要包含了 IOC (控制反轉) 和 DI (依賴注入) 特性, BeanFacotry 做爲工廠模式的超級接口, 耦合低 spring

總而言之: core 和 beans 主要控制了Object 的構成, 不管是自身仍是依賴, 一切都是以此爲基礎的。 架構

Context 模塊 在 core 和 beans 兩個模塊基礎之上構建, 繼承了beans模塊特性, 而且添加了國際化支持,事件傳播,資源加載, 開發式的上下文構建, 還支持 J2EE 特性,如EJB,JMX,還有基本的遠程調用, 超級接口 ApplicationContext

Expression Language  表達式支持, 這個主要就是用來支持一些spring XML 配置文件表達式 和 註解中一些表達式解析,讓配置有動態特性 app

總覽設計

系統最基礎模塊就是core 和 beans,因而可知控制一個bean的構成對於一個容器框架的總要性,至於context 
應用對象的載體 框架

其實從整體來看的話一切就變的有條理,細節再深刻

由spring的版原本看一些問題, 大概在spring2.5 以前spring都是以單獨模塊發佈的 (具體不明確), 直接一個spring.jar,可是在spring2.5 以後spring更加詳細的劃分爲以上的moduels發佈,由此對於JAR包的分割也值得咱們更加的細化了解框架結構, 仍是值得思考和學習的 分佈式

在我看來就是功能更加細化, 各個部分的依賴關係明確,爲spring的良好的結構和擴展打下堅實的基礎 工具

spring core 的包分佈

  1.    asm class級別操做
  2.    cglib 代理生成
  3.    core 這個是核心部分
  4.    utils 工具類集合, 大量的UTILS 別再造輪子了
   
   核心部分的設計固然是我最關心的, 到底哪些功能能夠被劃分到核心功能裏面呢? 我本身也是帶着這樣的疑問去看的
   
   首先看core 下面的包分佈
  1.    annotation (一些註解支持) 
  2.    covert (轉換器 -- 一些基本的基本底層的轉換器支持) 
  3.    enums(廢棄) 
  4.    env (環境運行配置信息 -- 這固然是很是必要的) 
  5.    io  (用於加載框架使用的不一樣資源) 
  6.    serializer 序列化 必不可少 可概括爲特殊工具 
  7.    style (對象的格式化輸出 / 沒有看到太多的實現  可歸類爲特殊工具) 
  8.    task 任務調度 
  9.    type 對於BEAN 的定義class進行一個元數據分析(用於細粒度的控制) 
   
   看看核心部分定義了那些超級接口, 這個最方便的是查看API 文檔 (學會使用API文檔對咱們理解一個框架構成很是重要)
   1. AliasRegistry  別名管理 若是是個人話可能就把這個扔到context包中了
   2. AttributeAccessor 對於對象元數據的訪問
   3. ErrorCoded  異常碼  原來spring也有這東西, 哎 我還不知道
   4. ControlFlow 調用棧信息
      PS 原來是這樣訪問當前調用棧信息的 new Throwable().getStackTrace(); 有點意外
   5. InfrastructureProxy 獲取代理對象
   6. ParameterNameDiscoverer 抓取方法和構造器的參數名稱 --- 咋作到的 我看到了在Aop中使用了他
   7. ordered  bean 優先級 
   8. PriorityOrdered  優先執行 PS : 想看看spring優先執行了那些 看看他的實現類吧
   
   還有個子包下面都是和自身有關的接口定義
   

   整體來講,spring core 主要仍是負責環境配置信息,資源訪問,type的元數據 很少 可是體現了這些在框架中的的重要性 學習

spring Beans 的包結構

包結構比較簡單 核心在Facotry , 其餘不列 功能明確 工廠, 固然核心也是這裏,其實這裏也能讓你感受到IOC/DI 和工廠的一些聯繫

關鍵的類
public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWrapper

SPRING BEAN 有那些? 生命週期
InitializingBean,DisposableBean 生產和銷燬
#JSR-250 @PostConstruct @PreDestroy 分別對應着 InitializingBean afterPropertiesSet 和 DisposableBean  destroy 兩個方法 
FactoryBean  通過加工修飾的BEAN / 一個BEAN 兩個對象能夠切換引用 具體使用查看相關文檔 spa

SPRING CONTEXT 精力有限 , 關注一些擴展點

================================== 
事件擴展點, 事件自己能爲項目帶來解耦, 或者可讓業務劃分爲主業務和旁支業務, 保證最終一致性便可 若是是在分佈式的環境中還能夠和消息驅動結合起來  設計

ApplicationEvent (定義) , ApplicationEventPublisherAware(發佈) ,ApplicationListener (監聽) ================================== 容器中BEAN 的建立的攔截處理 BeanPostProcessor , InitializingBean ================================== Factory 構建攔截 BeanFactoryPostProcessor  ================================== I18N 支持 MessageSource

相關文章
相關標籤/搜索