1. 程式人生 > >Spring原始碼深度解析(一)Spring的整體架構

Spring原始碼深度解析(一)Spring的整體架構

spring框架是一個分層架構,它包含一系列的功能要素,被分為大約20個模組,如下圖所示:

                                       spring整體架構圖

這些模組被總結為以下幾個部分:

(1)Core Container

Core Container(核心容器)包含有Core,Beans,Context,Expression Language模組。

Core 和 Beans模組是框架的基礎部分,提供IOC(控制反轉)和依賴注入特性。這裡的基礎概念 是BeanFactory,它提供Factory模式的經典實現來消除對程式單例模式的需要,並真正地允許你從程式邏輯中分離出依賴關係和配置。

  • Core模組主要包含Spring框架基本的核心工具類,Spring的其他元件都要使用到這個包裡的類,Core模組是其他元件的基本核心。當然你也可以在自己的應用系統中使用這些工具類。
  • Beans模組是所有應用都要用到的,它包含訪問配置檔案,建立和管理bean以及進行Inversion of Control/Dependency Injection(依賴注入)操作相關的所有類。
  • Context模組構建於Core和Beans模組基礎之上,提供了一種類似於JNDI註冊器的框架式的物件訪問方法。Context模組集成了Beans的特性,為Spring核心提供了大量的擴充套件,添加了對國際化(例如資源繫結),事件傳播,資源載入和對Context的透明建立的支援。Context模組同時也支援J2EE的一些特性,例如EJB(java企業Bean),JMX(Java Management Extensions,即Java管理擴充套件是一個為應用程式、裝置、系統等
    植入
    管理功能的框架)和基礎的遠端處理。ApplicationContext介面是Context模組的關鍵。
  • Expression Language 模組提供了一個強大的表示式語言用於在執行時查詢和操縱物件。它是JSP2.1規範中定義的unifed expression language的一個擴充套件。該語言支援設定/獲取屬性的值,屬性的分配,方法的呼叫,訪問陣列上下文(accession the context of arrays),容器和索引器,邏輯和算數運算子,命名變數以及從Spring的IOC容器中根據名稱檢索物件。它也支援list投影,選擇和一般的list聚合。

(2)Data Access/Integration.

Data Access/Integration層包含有JDBC,ORM,OXM,JMS和Transaction模組,其中:

  • JDBC模組提供了一個JDBC抽象層,它可以消除冗長的JDBC編碼和解析資料庫廠商特有的錯誤程式碼。這個模組包含了Spring對JDBC資料訪問進行封裝的所有類。
  • ORM(Object Relational Mapping物件關係對映)模組為流行的物件-關係對映API,如JPA,JDO,Hibernate,iBatis等,提供了一個互動層。利用ORM封裝包,可以混合使用所有Spring提供的特性進行O/R對映。如前邊提到的簡單宣告性事務管理。

Spring框架插入了若干個ORM框架,從而提供了ORM的物件關係工具,其中包括JDO,Hibernate和iBatisSQLMap。所有這些都遵從Spring的通用事務和DAO異常層次結構。

  • OXM模組提供了一個對Object/XML對映實現的抽象層,Object/XML對映實現包括JAXB(JAXB能夠使用Jackson對JAXB註解的支援實現(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,這樣一來可以更好的標誌可以轉換為JSON物件的JAVA類。JAXB允許JAVA人員將JAVA類對映為XML表示方式,常用的註解包括:@XmlRootElement,@XmlElement等等),Castor(Castor(http://castor.exolab..org/)是一種將Java物件和XML自動繫結的開源軟體。它可以在Java物件、XML文字、SQL資料表以及LDAP目錄之間繫結),XMLBeans(XMLBeans 1.0.3最強大的功能之一是可通過提供配置檔案定製程式碼生成),JiBX(從java程式碼到XML),和XStream(轉換java,xml).
  • JMS(Java Messaging Service)模組主要包含了一些製造和消費訊息的特性。
  • Transaction模組支援程式設計和宣告性的事務管理,這些事務類必須實現特定的介面,並且對所有的POJO(實際就是普通JavaBeans)都適用。

(3)Web.

Web上下文模組建立在應用程式上下文模組之上,為基於Web的應用程式提供了上下文。所以Spring框架支援與Jakarta Struts的整合。Web模組還簡化了處理多部分請求以及將請求引數繫結到域物件的工作。Web層包含了Web,Web-Servlet,Web-Struts和Web-Porlet模組,具體說明如下。

  • Web模組:提供了基礎的面向Web的整合特性。例如,多檔案上傳,使用servlet listeners初始化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層整合在一起,注意,該支援在Spring3.0中是deprecated的。
  • Web-Porlet模組:提供了用於Portlet環境和Web-Servlet模組的MVC的實現。

(4)AOP.

AOP模組提供了一個符合AOP聯盟標準的面向切面程式設計的實現,它讓你可以定義例如方法攔截器和切點。從而將邏輯程式碼分開,降低它們之間的耦合性。利用source-level的元資料功能,還可以將各種行為資訊合併到你的程式碼中,這有點像.Net技術中的attribute概念。

通過配置管理特性,SpringAOP模組直接將面向切面的程式設計功能整合到了Spring框架中,所以可以很容易地使Spring框架管理的任何物件支援AOP。Spring AOP模組為基於Spring的應用程式中的物件提供了事務管理服務。通過使用Spring AOP,不用依賴EJB元件,就可以將宣告性事務管理整合到應用程式中。

  • Aspects模組提供了對AspectJ(一個面向切面的框架,它擴充套件了Java語言)的整合支援。
  • Instrumentation模組提供了class instrumentation 支援和classloader實現,使得可以在特定的應用伺服器上使用。

(5)Test

Test模組支援使用JUnit和TestNG對Spring元件進行測試。

相關推薦

Spring原始碼深度解析Spring整體架構

spring框架是一個分層架構,它包含一系列的功能要素,被分為大約20個模組,如下圖所示:                                        spring整體架構圖 這些模組被總結為以下幾個部分: (1)Core Container Core

Spring原始碼深度解析容器的基礎XmlBeanFactory

現在我們已經對Srping的容器有了一個大概的瞭解,儘管很多地方還很迷糊,但是不要緊,下面我們開始探討每個步驟的詳細實現。接下來我們要深入分析以下程式碼的實現: BeanFactory bf = new XmlBeanFactory(new ClassPathResourc

併發程式設計—— Java 執行緒池 實現原理與原始碼深度解析

史上最清晰的執行緒池原始碼分析 鼎鼎大名的執行緒池。不需要多說!!!!! 這篇部落格深入分析 Java 中執行緒池的實現。 總覽 下圖是 java 執行緒池幾個相關類的繼承結構:    先簡單說說這個繼承結構,Executor 位於最頂層,也是最簡單的,就一個 execute(

Spring源碼深度解析

聯盟 容器 代碼 beans 管理 servle text spring框架 講解   Spring整體架構分為以下幾部分:     1.Core模塊:包含Spring框架的基本核心工具類,Spring其它組件都要使用到這個包中的類,Core模塊是其它組件的基本核心。   

Spring原始碼深度解析XmlBeanFactory原始碼解析

前言:     Spring容器有多種實現方式,一般來說可分為:BeanFactory和ApplicationContext     * BeanFactory提供了容器的基本功能,如getBean()等功能     * ApplicationContext介面繼承

Spring原始碼學習筆記 bean是怎麼生成的

bean 實在 bean 重新整理過程中產生的,首先我們看下 bean 的重新整理方法。下面是 AbstractApplicationContext 的 refresh 方法。 @Override public void refresh() throws

Java Spring MVC專案搭建——Spring MVC框架整合

轉自:https://www.cnblogs.com/eczhou/p/6287852.html 1、Java JDK及Tomcat安裝 我這裡安裝的是JDK 1.8 及 Tomcat 8,安裝步驟詳見:http://www.cnblogs.com/eczhou/p/6285248.html

OkHttp原始碼徹底解析OkHttp請求流程

前言 OkHttp是一個處理網路請求的開源專案,是安卓端最火熱的輕量級框架,由移動支付Square公司貢獻(該公司還貢獻了Picasso) 用於替代HttpUrlConnection和Apache HttpClient(android API23 6.0裡已移除HttpClient

模板方法模式深度解析

                1. 模板方法模式概述 在現實生活中,很多事情都包含幾個實現步驟,例如請客吃飯,無論吃什麼,一般都包含點單、吃東西、買單等幾個步驟,通常情況下這幾個步驟的次序是:點單 --> 吃東西 --> 買單。在這三個步驟中,點單和買單大同小異,最大的區別在於第二步——吃什麼?

java執行緒深度解析——java new 介面?匿名內部類給你答案

一、內部類 1、內部類初識 一般,一個類裡主要包含類的方法和屬性,但在java中還提出在類中繼續定義類(內部類)的概念。 內部類的定義:類的內部定義類 先來看一個例項 public class Ou

Android網路框架:OKHttp原始碼簡單解析

這是第一次解析原始碼並把它寫出來,在之前,我一直以為只要會用別人的輪子就好,做出實際的效果就行,對看原始碼對自己的能力提升不以為然。後來偶然聽到一句話:看別人的DEMO,你就可以會用輪子,但是要想用好輪子,還是得看原始碼。我覺得看原始碼有兩個方面的好處: 1

Spring原始碼深度解析》學習筆記——Spring整體架構與容器的基本實現

Spring的整體架構 Spring框架是一個分層架構,它包含一系列的功能要素,並被分為大約20個模組,如下圖所示 這些模組被總結為以下幾個部分: Core Container Core Container(核心容器)包含有Core、Beans、Contex

OpenLTE開原始碼結構解析

跟蹤了一個在將開源組織-OpenLTE(將4G通訊網路LTE開源),現將自己梳理整理的一些文件Post出來,請有相同興趣的朋友指點: 一,系統介紹 OpenLTE是一位Mot的工程師在12年發起的一個git專案,目的在於在PC上面實現LTE基站側的協議棧,同時也提供了大量

Java併發之synchronized關鍵字深度解析

前言         近期研讀路神之絕世武學,徜徉於浩瀚無垠知識之海洋,偶有攫取吉光片羽,惶恐未領略其精髓即隱入歲月深處,遂急忙記錄一二,順備來日吹cow之談資。本小系列為併發之親兒子-獨臂狂俠synchronized專場。 一、使用場景     &

Spark核心原始碼深度剖析1 - Spark整體流程 和寬依賴和窄依賴

1 Spark 整體流程 2 寬依賴和窄依賴 2.1 窄依賴 Narrow Dependency,一個RDD對它的父RDD,只有簡單的一對一的依賴關係。即RDD的每個 partition僅僅依賴於父RDD中的一個 partition。父RDD和子RDD的

SpringMVC原始碼剖析SpringMVC整體架構分析和建立

先看一下Servlet的繼承結 前面的Servlet體系我都有講過HttpServlet實現了根據動作分發請求 其他結構重要的類為HttpServletBean,FrameworkServlet ,DispatcherServlet 在Spring中實現了XXXAware

TAF /tars必修課整體架構理解

來自零點智慧社群 一、前言 TAF,一個後臺邏輯層的高效能RPC框架,目前支援C++,Java, node 三種語言, 往後可能會考慮提供更多主流語言的支援如 go等,自定義協議JCE,同時也支援HTTP。 它集可擴充套件協議編解碼、高效能RPC通訊框架、名字路由與發現、釋出監控、日誌統計、

Spring原始碼深度解析總結3—— 配置檔案的讀取和Bean的載入

上一篇總結了Spring利用Resource介面對配置檔案的封裝,接下來我們要看看Spring對封裝好的資源是如何解析的,以及如何利用解析出的資訊載入Bean的。BeanFactory bf = new XmlBeanFactory(new ClassPathResoure(

Spring原始碼解析——元件註冊1

一、@Configuration&@Bean給容器中註冊元件 public class Person { private String name; private Integer age; public Person() { } public

spring原始碼深度解析筆記

之前提到在xmlBeanFactory建構函式中呼叫了XmlBeanDefinitionReader型別的reader屬性提供的方法this.reader.loadBeanDefinitions(resource),這就是載入整個資源載入的切入點。 當進入XmlBeanDe