spring源碼分析-----總覽spring架構-----整體篇
一,一切圍繞著bean轉圈
在這裏我們要重新提升java是一門面向對象的語言,OOP語言,為什麽這麽說呢,我們通過spring這個框架的來切入看一下,spring的做的許多的東西都是圍繞著bean來轉的,而我們的java語言就是面向對象的語言,說白了就是把一個個不同的bean返給端上,讓端上(安卓,ios,html5,pc)用不同的語言來解析一個個的bean。
假如沒有spring的話,我們想象每個bean的屬性都必須自己一個個的塞進去,每個對象都需要new等等。
同時新的編程技術 AOP 和 DI 的不斷出現,他們為 JavaBean 提供了更強大功能,所以我們看到spring就是圍繞著如何創建bean,以及如何讓bean有更強大功能展開的,這個是它的核心。
二,創建bean常用的設計模式
spring核心組件是org.springframework.beans 包,它的設計目標是與 JavaBean 組件一起使用。最高級抽象是 BeanFactory 接口,它是工廠設計模式的實現,BeanFactory 也可以管理對象之間的關系。這個對象我們在後面會深入研究的。
BeanFactory 支持兩個對象模型。
1,單例:模型提供了具有特定名稱的對象的共享實例,可以在查詢時對其進行檢索。Singleton 是默認的也是最常用的對象模型。對於無狀態服務對象很理想。
2,原型:模型確保每次檢索都會創建單獨的對象。在每個用戶都需要自己的對象時,原型模型最適合。(解決多線程問題),就是多例的(個人理解原型就是多例的)
Bean 工廠的概念是 Spring 作為 IOC 容器的基礎。IOC 則將處理事情的責任從應用程序代碼轉移到框架。
三,系統架構
Spring 總共大約有 20 個模塊,由 1300 多個不同的文件構成。
組成 Spring 框架的每個模塊集合或者模塊都可以單獨存在,也可以一個或多個模塊聯合實現。每個模
塊的組成和功能如下:
3.1.核心容器
由 spring-beans、spring-core、spring-context 和 spring-expression(SpringExpression Language, SpEL) 4 個模塊組成。
spring-beans 和 spring-core 模塊是 Spring 框架的核心模塊,包含了控制反轉(Inversion ofControl, IOC)和依賴註入(Dependency Injection, DI)
spring-context 模塊構架於核心模塊之上,他擴展了 BeanFactory,為她添加了 Bean 生命周期控制、框架事件體系以及資源加載透明化等功能。此外該模塊還提供了許多企業級支持,如郵件訪問、遠程訪問、任務調度等,ApplicationContext 是該模塊的核心接口,她是 BeanFactory 的超類,與BeanFactory 不同,ApplicationContext 容器實例化後會自動對所有的單實例 Bean 進行實例化與依賴關系的裝配,使之處於待用狀態。
spring-expression 模塊是統一表達式語言(EL)的擴展模塊,可以查詢、管理運行中的對象,同時也方便的可以調用對象方法、操作數組、集合等。它的語法類似於傳統 EL,但提供了額外的功能,最出色的要數函數調用和簡單字符串的模板函數。這種語言的特性是基於 Spring 產品的需求而設計,他可以非常方便地同 Spring IOC 進行交互
3.2.AOP 和設備支持
由 spring-aop、spring-aspects 和 spring-instrument 3 個模塊組成。
spring-aop 是 Spring 的另一個核心模塊,是 AOP 主要的實現模塊。作為繼 OOP 後,對程序員影響最大的編程思想之一,AOP 極大地開拓了人們對於編程的思路。在 Spring 中,他是以 JVM 的動態代理技術為基礎,然後設計出了一系列的 AOP 橫切實現,比如前置通知、返回通知、異常通知等,同時,Pointcut 接口來匹配切入點,可以使用現有的切入點來設計橫切面,也可以擴展相關方法根據需求進行切入。
spring-aspects 模塊集成自 AspectJ 框架,主要是為 Spring AOP 提供多種 AOP 實現方法。
spring-instrument 模塊是基於 JAVA SE 中的"java.lang.instrument"進行設計的,應該算是AOP 的一個支援模塊,主要作用是在 JVM 啟用時,生成一個代理類,程序員通過代理類在運行時修改類的字節,從而改變一個類的功能,實現 AOP 的功能。
3.3.數據訪問及集成
由 spring-jdbc、spring-tx、spring-orm、spring-jms 和 spring-oxm 5 個模塊組成。
spring-jdbc 模塊是 Spring 提供的 JDBC 抽象框架的主要實現模塊,用於簡化 Spring JDBC。主要是提供 JDBC 模板方式、關系數據庫對象化方式、SimpleJdbc 方式、事務管理來簡化 JDBC 編程,主要實現類是 JdbcTemplate、SimpleJdbcTemplate 以及 NamedParameterJdbcTemplate。
spring-tx 模塊是 Spring JDBC 事務控制實現模塊。使用 Spring 框架,它對事務做了很好的封裝,通過它的 AOP 配置,可以靈活的配置在任何一層;但是在很多的需求和應用,直接使用 JDBC 事務控制還是有其優勢的。其實,事務是以業務邏輯為基礎的;一個完整的業務應該對應業務層裏的一個方法;如果業務操作失敗,則整個事務回滾;所以,事務控制是絕對應該放在業務層的;但是,持久層的設計則應該遵循一個很重要的原則:保證操作的原子性,即持久層裏的每個方法都應該是不可以分割的。所以,在使用 Spring JDBC 事務控制時,應該註意其特殊性。
spring-orm 模塊是 ORM 框架支持模塊,主要集成 Hibernate, Java Persistence API (JPA) 和Java Data Objects (JDO) 用於資源管理、數據訪問對象(DAO)的實現和事務策略。
spring-jms 模塊(Java Messaging Service)能夠發送和接受信息,自 Spring Framework 4.1以後,他還提供了對 spring-messaging 模塊的支撐。
spring-oxm 模塊主要提供一個抽象層以支撐 OXM(OXM 是 Object-to-XML-Mapping 的縮寫,它是一個 O/M-mapper,將 java 對象映射成 XML 數據,或者將 XML 數據映射成 java 對象),例如:JAXB,Castor, XMLBeans, JiBX 和 XStream 等。
3.4.Web
由 spring-web、spring-webmvc、spring-websocket 和 spring-webflux 4 個模塊組成。
spring-web 模塊為 Spring 提供了最基礎 Web 支持,主要建立於核心容器之上,通過 Servlet 或者 Listeners 來初始化 IOC 容器,也包含一些與 Web 相關的支持。
spring-webmvc 模 塊 眾 所 周 知 是 一 個 的 Web-Servlet 模 塊 , 實 現 了 Spring MVC(model-view-Controller)的 Web 應用。
spring-websocket 模塊主要是與 Web 前端的全雙工通訊的協議。
spring-webflux 是一個新的非堵塞函數式 Reactive Web 框架,可以用來建立異步的,非阻塞,事件驅動的服務,並且擴展性非常好。
3.5.報文發送
即 spring-messaging 模塊。
spring-messaging 是從 Spring4 開始新加入的一個模塊,主要職責是為 Spring 框架集成一些基礎的報文傳送應用。
3.6.Test
即 spring-test 模塊。
spring-test 模塊主要為測試提供支持的,畢竟在不需要發布(程序)到你的應用服務器或者連接到其他企業設施的情況下能夠執行一些集成測試或者其他測試對於任何企業都是非常重要的。
3.7,各個模塊之間的依賴
spring源碼分析-----總覽spring架構-----整體篇