讀源碼之Spring 核心內容
- 2020 年 5 月 9 日
- 筆記
- spring, spring模組, 如何學習spring
為什麼有這篇文檔
工作兩三年之後,總感覺什麼東西都懂,但是什麼東西又都不會。所以日常學習是很有必要的,俗話說學而不思則罔 ,思而不學則殆。所以我們要學思結合,學習的方法有很多,但是思考的深度或者說有沒有思考最好的體現方式就是輸出。本系列以開發日常中用的最多的框架Spring為例,來記錄學而思的過程。
Spring生態圈
學習Spring最好的方式還是官網 //spring.io/,進入官網我們可以了解到Spring其實是一個生態圈 裡邊包含了很多功能強大的子框架 例如 SpringBoot SpringCloud以及SpringData等根據Spring衍生出來的框架。我們最常說的spring 是指的是 Spring Framework 選擇 Spring Framework 進入wiki 我們可以看到這樣一段話
··The Spring Framework is divided into modules. Applications can choose which modules they need. At the heart are the modules of the core container, including a configuration model and a dependency injection mechanism. Beyond that, the Spring Framework provides foundational support for different application architectures, including messaging, transactional data and persistence, and web. It also includes the Servlet-based Spring MVC web framework and, in parallel, the Spring WebFlux reactive web framework.
意思是說 spring分為好多個模組,應用開發的時候可以根據自身的需要選擇模組,核心模組是包含spring核心功能的AOP和IOC的,其他的 事務,消息 web等模組可以根據需求進行添加。
Spring 源碼的構建
學習Spring 源碼第一步就是需要從github上下載構建源碼,地址://github.com/spring-projects/spring-framework.git
springframework 是使用gradle 構建的 構建方式比較簡單,這裡不再多說,如果有讀者構建失敗,可以留言。
springframework 模組介紹
spring框架是一個分層的架構,它包含了一系列的功能,並被分成了20多個模組。
Core Container
core Container(核心容器) 它包含了 Core、Beans、Context、Expression Language
Core 模組
Core 模組是Spring框架的核心基礎,是其他模組的工具類,包含cglib 和asm等工具集。
Beans模組
Beans 模組是所有應用都要用到的,它包含訪問配置文件,創建和管理bean以及IOC/DI操作相關類
Context 模組
Context 模組構建於Beans和Core模組之上,提供了類似於JNDI註冊器的框架式訪問對象的方法。Contex在Beans的基礎上擴展了很多功能例如國際化、事件傳播、資源載入等。ApplicationContext 在此模組上。
Expression Language 模組
此模組提供了強大的表達式語言在運行時查詢和操縱對象。它是JSP 2.1規範中定義的unifed expression language的一個擴展。該語言支援設置/獲取屬性的值,屬性的分配,方法的調用,訪問數組上下文(accessiong the context ofarrays)、容器和索引器、邏輯和算術運算符、命名變數以及從Spring的IoC容器中根據名稱檢索對象。它也支援list投影、選擇和一般的list聚合。
Data Access/Integration
這一部分主要是包含數據訪問對象關係映射,JMS 消息以及事務等內容
- JDBC模組提供了一個JDBC抽象層,它可以消除冗長的JDBC編碼和解析資料庫廠商特有的錯誤程式碼。這個模組包含了Spring對JDBC數據訪問進行封裝的所有類。
- ORM模組為流行的對象-關係映射API,如JPA、JDO、Hibernate、iBatis等,提供了一個交互層。利用ORM封裝包,可以混合使用所有Spring提供的特性進行O/R映射。如前邊提到的簡單聲明性事物管理。Spring框架插入了若干個ORM框架,從而提供了ORM的對象關係工具,其中包括JDO、Hibernate和iBatisSQL Map。所有這些都遵從Spring的通用事務和DAO異常層次結構。
- OXM模組提供了一個對Object/XML映射實現的抽象層,Object/XML映射實現包括JAXB、Castor、XMLBeans、JiBX和XStream。
- JMS(Java Messaging Service)模組主要包含了一些製造和消費消息的特性。
- Transaction模組支援編程和聲明性的事物管理,這些事物類必須實現特定的介面,並且對所有的POJO都適用。
Web 模組
Web上下文模組建立在應用程式上下文模組之上,為基於Web的應用程式提供了上下文。所以, Spring框架支援與Jakarta Struts的集成。Web模組還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。Web層包含了Web、Web-Servlet、Web-Struts和Web-Porlet模組,具體說明如下。
- Web模組:提供了基礎的面向Web的集成特性。例如,多文件上傳、使用servletlisteners初始化IoC容器以及一個面向Web的應用上下文。它還包含Spring遠程支援中Web的相關部分。
- Web-Servlet模組web.servlet.jar:該模組包含Spring的model-view-controller(MVC)實現。Spring的MVC框架使得模型範圍內的程式碼和web forms之間能夠清楚地分離開來,並與Spring框架的其他特性集成在一起。
- Web-Struts模組:該模組提供了對Struts的支援,使得類在Spring應用中能夠與一個典型的Struts Web層集成在一起。注意,該支援在Spring 3.0中是deprecated的。
- Web-Porlet模組:提供了用於Portlet環境和Web-Servlet模組的MVC的實現。
AOP。
AOP模組提供了一個符合AOP聯盟標準的面向切面編程的實現,它讓你可以定義例如方法攔截器和切點,從而將邏輯程式碼分開,降低它們之間的耦合性。利用source-level的元數據功能,還可以將各種行為資訊合併到你的程式碼中,這有點像.Net技術中的attribute概念。通過配置管理特性,Spring AOP模組直接將面向切面的編程功能集成到了Spring框架中,所以可以很容易地使Spring框架管理的任何對象支援AOP。Spring AOP模組為基於Spring的應用程式中的對象提供了事務管理服務。通過使用Spring AOP,不用依賴EJB組件,就可以將聲明性事務管理集成到應用程式中。
● Aspects模組提供了對AspectJ的集成支援。
● Instrumentation模組提供了class instrumentation支援和classloader實現,使得可以在特定的應用伺服器上使用。
Test。
Test模組支援使用JUnit和TestNG對Spring組件進行測試。
總結
以上內容是Spring整體架構的簡單介紹,只需要了解Spring 有哪些模組 ,這些模組提供哪些功能即可,重點的東西是先學會使用Spring,然後了解其運行的原理,以及使用的設計模式等。這些在以後的部分都會聊到。