第1章 Spring整體架構(gòu)和環(huán)境搭建


??Spring是于2003年興起的一個(gè)輕量級(jí)的Java開源框架,由Rod Johnson在其著作《ExpertOne-On-One J2EE Development and Design》中闡述的部分理念和原型衍生而來.
??Spring是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的,它使用基本的JavaBean來完成以前只可能由EJB完成的事情.然而,Spring的用途不僅限于服務(wù)器端的開發(fā).從簡單性 可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益.


1.1 Spring的整體架構(gòu)

??Spring框架是一個(gè)分層架構(gòu),它包含一系列的功能要素,并被分為大約20個(gè)模塊,如圖1-1所示.

圖1-1 Spring整體架構(gòu)圖
這些模塊被總結(jié)為以下幾部分.


(1)Core Container
??Core Container(核心容器)包含Core、Beans、Context和Expression Language模塊.
??Core 和 Beans模塊是框架的基礎(chǔ)部分,提供IoC(控制反轉(zhuǎn))和依賴注入特性.這里的基礎(chǔ)概念是BeanFactory,它提供對(duì)Factory模式的經(jīng)典實(shí)現(xiàn)來消除對(duì)程序性單例模式的需要,并真正地允許你從程序邏輯中分離出依賴關(guān)系和配置.

  • Core模塊 : 主要包含Spring框架基本的核心工具類,Spring的其他組件都要使用到這個(gè)包里的類,Core模塊是其他組件的基本核心.當(dāng)然你也可以在自己的應(yīng)用系統(tǒng)中使用這些工具類;
  • Beans模塊 : 這個(gè)模塊所有應(yīng)用都要用到,它包含訪問配置文件 創(chuàng)建和管理bean以及進(jìn)行IoC/DI操作相關(guān)的所有類;
  • Context模塊 : 該模塊構(gòu)建于Core和Beans模塊基礎(chǔ)之上,提供了一種類似于JNDI注冊(cè)器的框架式對(duì)象訪問方法.Context模塊繼承了Beans的特性,為Spring核心提供了大量擴(kuò)展,添加了對(duì)國際化、事件傳播 、資源加載和堆Context的透明創(chuàng)建的支持。Context模塊同時(shí)也支持J2EE的一些特性,例如EJB、JMX和基礎(chǔ)的遠(yuǎn)程處理。其中ApplicationContext接口是Context模塊的關(guān)鍵。
  • Expression Language模塊 : 該模塊提供了一個(gè)強(qiáng)大的表達(dá)式語言用于在運(yùn)行時(shí)查詢和操縱對(duì)象。它是JSP2.1規(guī)范中定義的一個(gè)擴(kuò)展。該語言支持設(shè)備/獲取屬性的值、屬性的分配、方法的調(diào)用、訪問數(shù)組上下文、容器和索引器、邏輯和算術(shù)運(yùn)算符、命名變量以及從Spring的IoC容器中根據(jù)名稱檢索對(duì)象。它也支持list投影、選擇和一般的list聚合。

(2)Data Access/Integration
??Data Access/Integration層包含有JDBC、ORM、OXM、JMS和Transaction模塊,其中:

  • JDBC模塊提供了一個(gè)JDBC抽象層,它可以消除冗長的JDBC編碼和解析數(shù)據(jù)庫廠商特有的錯(cuò)誤代碼。這個(gè)模塊包含了Spring對(duì)JDBC數(shù)據(jù)訪問進(jìn)行封裝的所有類。
  • ORM模塊為流行的對(duì)象-關(guān)系映射API,如JPA、JDO、Hibernate、iBatis等,提供了一個(gè)交互層。利用ORM封裝包,可以混合使用所有Spring提供的特性進(jìn)行O/R映射(如簡單聲明性事務(wù)管理)。
    Spring框架插入了若干個(gè)ORM框架,從而提供了ORM的對(duì)象關(guān)系工具,其中包括JDO、Hibernate和iBatisSQL Map。所有這些都遵從Spring的通用事務(wù)和DAO異常層次結(jié)構(gòu)。
  • OXM模塊提供了一個(gè)對(duì)Object/XML映射實(shí)現(xiàn)的抽象層,Object/XML映射實(shí)現(xiàn)包括JAXB、Castor、XMLBeans、JiBX和XStream。
  • JMS模塊主要包含了一些制造和消費(fèi)消息的特性。
  • Transaction模塊支持編碼和聲明性的事務(wù)管理,這些事務(wù)類必須實(shí)現(xiàn)特定的接口,并且對(duì)所有的POJO都適用。

(3)Web
??Web上下文模塊建立在應(yīng)用程序上下文模塊之上。所以,Spring框架支持與Jakarta Struts集成。Web模塊還簡化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ?。Web層包含了Web、Web-Servlet、Web-Struts和Web-Porlet模塊,具體說明如下。

  • Web模塊:提供了基礎(chǔ)的面向Web的集成特性。例如,多文件上傳、使用servlet listeners初始化IoC容器以及一個(gè)面向Web的應(yīng)用上下文。它還包含Spring遠(yuǎn)程支持中Web的相關(guān)部分。
  • Web-Servlet模塊web.servlet.jar:該模塊包含Spring的model-view-controller(MVC)實(shí)現(xiàn)。Spring的MVC框架使得模型范圍內(nèi)的代碼和web forms之間能夠清楚地分離開來,并與Spring框架的其他特性集成在一起。
  • Web-Struts模塊:該模塊提供了對(duì)Struts的支持,使得類在Spring應(yīng)用中能夠與一個(gè)典型的Struts Web層集成在一起。注意,該支持在Spring3.0中是deprecated的。
  • Web-Porlet模塊:提供了用于Portlet環(huán)境和Web-Servlet模塊的MVC的實(shí)現(xiàn)。

(4)AOP
??AOP模塊提供了一個(gè)符合AOP聯(lián)盟標(biāo)準(zhǔn)的面向切面編程的實(shí)現(xiàn),它讓你可以定義例如方法攔截器和切點(diǎn),從而將邏輯代碼分開,降低他們之間的耦合性。利用source-level的元數(shù)據(jù)功能,還可以將各種行為信息合并到你的代碼中,這有點(diǎn)像.Net技術(shù)中的attribute概念。
??通過配置管理特性,Spring AOP模塊直接將面向切面的編程功能集成到了Spring框架中,所以可以很容易地使Spring框架管理的任何對(duì)象支持AOP。Spring AOP模塊為基于Spring的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過使用Spring AOP,不用依賴EJB組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。

  • Aspects模塊提供了對(duì)AspectJ的集成支持。
  • Instrumentation模塊提供了class Instrumentation支持和classloader實(shí)現(xiàn),使得可以在特定的應(yīng)用服務(wù)器上使用。

(5)Test
??Test模塊支持使用JUnit和TestNG對(duì)Spring組件進(jìn)行測(cè)試。


1.2 環(huán)境搭建

??Spring已經(jīng)將源碼從svn遷移到了GitHub。而且也改為基于Gradle的構(gòu)建來構(gòu)建項(xiàng)目,它取代了之前的Ant+lvy系統(tǒng),所以要構(gòu)建Spring源碼環(huán)境首先要安裝GitHub和Gradle。

1.2.1 安裝GitHub

??首先需要到GitHub官網(wǎng)去下載安裝包,官方下載地址:https://git-scm.com/downloads;下載完成以后進(jìn)行安裝即可,由于網(wǎng)上對(duì)應(yīng)有很多安裝教程這里就不在詳細(xì)介紹了,下面是筆者從網(wǎng)上找到的認(rèn)為比較好的博客以及視頻資源供大家參考


1.2.2 安裝Gradle

??Gradle是一個(gè)基于Groovy的構(gòu)建工具,它使用Groovy來編寫構(gòu)建腳本,支持依賴管理和多項(xiàng)目創(chuàng)建,類似Maven,但比其更加簡單輕便。Gradle為lvy提供了一個(gè)layer,提供了build-by-convention集成,而且它還讓你獲得許多類似Maven的功能。你可以從http://services.gradle.org/distributions/下載安裝Gradle,安裝完成后配置環(huán)境變量即可。


1.2.3 下載Spring

1??通過GItHub頁面(https://github.com/spring-projects/spring-framework/tree/5.0.x)下載源碼zip包,這里使用的是Spring5.0.x的版本;

2??雙擊下載好的zip包進(jìn)行解壓
3??閱讀目錄下的import-into-idea.md文件
可以按照文件上的步驟進(jìn)行操作,如果報(bào)錯(cuò)可以嘗試使用以下的方法(筆者是通過IDE直接導(dǎo)入的)
4??通過IntelliJ IDEA使用gradle構(gòu)建項(xiàng)目
選擇Import Project
5??選擇剛才解壓過的Spring源碼文件夾點(diǎn)擊open
6??選擇使用gradle構(gòu)建并點(diǎn)擊next
7??選擇gradle的目錄并點(diǎn)擊Finish
8??開始構(gòu)建這一步耗時(shí)會(huì)比較長
9??構(gòu)建成功

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,290評(píng)論 6 342
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,361評(píng)論 25 708
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,138評(píng)論 2 59
  • 01 “以貌取人”是最近流行起來的一個(gè)觀點(diǎn),據(jù)說一個(gè)人的能力和素質(zhì),與她的美麗程度是成正比的。 美國有項(xiàng)報(bào)告指出,...
    BoBo520閱讀 3,970評(píng)論 2 7

友情鏈接更多精彩內(nèi)容