spring(二):源碼分析

1. spring思想

spring思想 應用場景(特點) 一句話歸納
AOP 1.Aspect Oriented Programming(面向切面編程)
2.找出多個類中有一定規律的代碼,開發時拆開,運行時合併。
2.面向切面編程即面向規則編程
解耦,專人做專事
OOP 1.Object Oriented Programming
2.歸納總結生活中的一切事物
封裝,繼承,多態,(抽象)
BOP 1.Bean Oriented Programming
2.面向bean(普通java類)的設計程序
一切從bean開始
IOC 1.Inversion of Control
2.將new對象的動作交給spring管理,並由Spring保存已創建的對象
轉交控制權(控制權反轉)
DI/DL 1.Dependency Injection(依賴注入)/Dependency Lookup(依賴查找)
2.依賴注入,依賴查找,sping不僅保存自己創造的對象,而且保存對象和對象之間的關係
3.注入及賦值,主要有三種方式:構造方法,set方法,直接賦值。
先理清關心在賦值
設計模式 應用場景 一句話總結
代理模式
Proxy
1.兩個參與角色:執行者(代理人),被代理人
2.對於被代理人來說,事情一定要做,但是自己不想做或者沒有時間做(不能自己去做),找代理做
3.代理人必須獲取別代理人的資料(持有被代理人的引用)
辦事要求人,找代理
工廠模式
Factory
1.對調用者隱藏複雜的邏輯處理過程,調用者者關心執行結果
2.工廠要對結果負責,保證生產出符合規則的產品
只對結果負責,不要三無產品 , 關心結果
單例模式
Singleton
1.保證從系統開始到系統終止,全過程只會產生一個實例
2.當我們在應用中遇到功能性衝突的時候,就需要使用單例模式
保證獨一無二
委派模式
Delegate
1.兩個角色參與,委託人和被委託人
2.委託人和被委託人處於一個平等的地位(實現同一個接口)
3.委託人持有被委託人的引用
不關心過程,只關心結果
幹活時你的(普通員工)
功勞是我的(項目經理)
策略模式
Strategy
1.執行最終結果一樣2.執行過程和執行邏輯不一樣 我行我素,達到目的就行
原型模式
Prototype
1.首先有一個原型
2.數據內容相同,但對象實例不同(完全不同的內存地址)
拔一個猴毛,吹出千萬個(克隆)
模板模式
Template
1.執行流程固定,但中間有些步驟有細微差別
2.課實現批量生產
流程標準化,材料自己加

2. spring系統架構

在這裏插入圖片描述
組成spring框架的每個模塊集合或者模塊都可以單獨存在,也可以一個或者多個模塊聯合實現。每個模塊的組成和功能如下:

2.1. 核心容器

核心容器:由spring-Beans、spring-Core、spring-Context、spring-SpEL(Spring Expression Language)四個模塊組成。

  1. core和beans模塊是spring框架的核心模塊,包括了IOC(控制反轉)和Dependency Injection(依賴注入)。BeanFactory接口是spring框架中的核心接口。是工廠模式的具體實現。BeanFactory使用控制反轉對應用程序的配置和依賴性規範與實際應用程序代碼進行了分離。但BeanFactory容器實例化後不會自動實例化bean,只有當bean被使用時,benaFactory容器纔會對該Bean進行實例化與依賴關係的裝配。

  2. spring-contest模塊構架於核心模塊之上,他擴展了BeanFactory,爲她添加了Bean生命週期控制、框架事件體系以及資源加載透明化等功能。此外該模塊還提供了許多企業級支持,如郵件訪問、遠程訪問、任務調度等, Applicat ionContext是該模塊的核心接口,她是BeanFactory的超類,與BeanFactory不同,Applicat ionContext容器實例化後會自動對所有的單實例Bean進行實例化與依賴關係的裝配,使之處於待用狀態。

  3. spring-expression模塊是統一表達式語言(unified EL)的擴展模塊,可以查詢、管理運行中的對象,同時也方便的可以調用對象方法、操作數組、集合等。它的語法類似於傳統EL,但提供了額外的功能,最出色的要數函數調用和簡單字符串的模板函數。這種語言的特性是基於Spring產品的需求而設計,他可以非常方便地同Spring IoC進行交互。

2.2. AOP和設備支持

AOP和設備支持:由spring-aop、spring aspects和spring-instrumentation 3個模塊組成。

  1. spring-aop 是Spring的另-一個核心模塊,是Aop主要的實現模塊。作爲繼00P後,對程序員影響最大的編程思想之一,Aop 極大地開拓了人們對於編程的思路。在Spring中,他是以JVM的動態代理技術爲基礎,然後設計出了一系列的Aop橫切實現,比如前置通知、返回通知、異常通知等,同時,Pointcut接口來匹配切入點,可以使用現有的切入點來設計橫切面,也可以擴展相關方法根據需求進行切入。
  2. spring aspects模塊集成自AspectJ框架,主要是爲Spring Aop 提共多種Aop實現方法。
  3. spring-instrumentation模塊是基於JAVA SE中的”java lang. instrument”進行設計的,應該算是Aop的一個支援模塊,主要作用是在JVM啓用時,生成一個代理類,程序員通過代理類在運行時修改類的字節,從而改變-一個類的功能,實現Aop的功能。在分類裏,我把他分在了Aop 模塊下,在Spring官方文檔裏對這個地方也有點含糊不清,這裏是純個人觀點。

2.3. 數據訪問及集成

數據訪問及集成:由spring- idbc、spring-tx、 spr ing-orm、spring-ims 和spring-oxm 5個模塊組成。

  1. spring-idbc.模塊是Spring提供的JDBC抽象框架的主要實現模塊,用於簡化Spring JDBC。主要是提供JDBC模板方式、關係數據庫對象化方式、SimpleJdbc方式、事務管理來簡化JDBC編程,主要實現類是JdbcTemplate~ SimpleJdbcTemplate 以及NamedParame ter Jdbc Template。
  2. spring-tx模塊是Spring JDBC事務控制實現模塊。使用Spring框架,它對事務做了很好的封裝,通過它的AOP配置,可以靈活的配置在任何一層;但是在很多的需求和應用,直接使用JDBC事務控制還是有其優勢的。其實,事務是以業務邏輯爲基礎的;一個完整的業務應該對應業務層裏的一個方法;如果業務操作失敗,則整個事務回滾,所以,事務控制是絕對應該放在業務層的;但是,持久層的設計則應該遵循一個很重要的原則:保證操作的原子性,即持久層裏的每個方法都應該是不可以分割的。所以,在使用Spring JDBC 事務控制時,應該注意其特殊性。
  3. spring-orm模塊是ORM框架支持模塊,主要集成Hibernate, Java Persistence API (JPA)和JavaData 0bjects (JDO) 用於資源管理、數據訪問對象(DAO)的實現和事務策略。
  4. spring-ims模塊(Java Messaging Service) 能夠發送和接受信息,自Spring Framework 4.1 以後,他還提供了對spring- messaging模塊的支撐。
  5. spring-oxm模塊主要提供一個抽象層以支撐0XM (OXM是0bject-to-XML-Mapping的縮寫,它是個0/M mapper,將java對象映射成XML數據,或者將XML數據映射成java對象),例如: JAXB, Castor,XMLBeans, JiBX和XStream等。

2.4.web

Web:由spring- web、spring-webmvc、 spring-websocket 和spring-webmvc-portlet 4個模塊組成。

  1. spring web模塊爲Spring提供了最基礎Web支持,主要建立於核心容器之上,通過Servlet或者Listeners來初始化IoC容器,也包含一些與Web相關的支持。
  2. spring-webmvc模塊衆所周知是-一個的Web-Servlet模塊,實現了Spring MVC(model -view controller)的Web應用。
  3. spring-websocket模塊主要是與Web前端的全雙工通訊的協議。( 資料缺乏,這是個人理解)
    4.spring-webmyc-portlet模塊是知名的Web-Portlets模塊( Portlets在Web門戶上管理和顯示的可插拔的用戶界面組件。Portlet產生可以聚合到門戶頁面中的標記語言代碼的片段,如HTML, XML等),主要是爲SpringMVC提供Portlets組件支持。

2.5.報文發送

報文發送:即spring -messaging模塊。
spring messaging是Spring4新加入的一個模塊,主要職責是爲Spring框架集成一些 基礎的報文傳送應用。

2.6. test

Test:即spring test模塊。
spring-test模塊主要爲測試提供支持的,畢竟在不需要發佈(程序)到你的應用服務器或者連接到其他企業設施的情況下能夠執行-些集成測試或者其他測試對於任何企業都是非常重要的。

3. 依賴關係

如果你想加入spring源碼的學習,筆者的建議是從spring -core入手,其次是spring-beans和spring-aop, 隨後是spring-context, 再其次是spring-tx和spring-orm, 最後是spring - web和其他部分。

4. spring源碼下載

  第一步: https://github.com/spring-projects/spring-framework/releases/tag/v3.2.6.RELEASE

  第二步:下載gradle

  http://downloads. gradle. org/ distributions/gradle-1.6-bin. zip 

  第三步:解壓,配置GRADLE_ HOME和Path

  第四步:驗證gradle -v,環境變量是否正確

  第五步:構建eclipse項目gradle eclipse -x :eclipse

  第六步:引入到Eclipse環境中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章