程序員筆記——Spring基本概念速覽

(一)Spring IoC

重要概念

一、控制反轉(Inversion of control):

控制反轉是一種經過描述(在java中經過xml或者註解)並經過第三方去產生或獲取特定對象的方式。java

控制反轉IoC(Inversion of Control)是說建立對象的控制權進行轉移,之前建立對象的主動權和建立時機是由本身把控的,而如今這種權力轉移到第三方,好比轉移交給了IoC容器,它就是一個專門用來建立對象的工廠,你要什麼對象,它就給你什麼對象,有了 IoC容器,依賴關係就變了,原先的依賴關係就沒了,它們都依賴IoC容器了,經過IoC容器來創建它們之間的關係。web

控制反轉就是獲取依賴對象的方式反轉了,正常狀況下由應用程序主動建立依賴對象,實現對依賴對象的管理,建立依賴對象的控制權在應用程序手中,應用程序須要什麼對象,就主動去建立這個對象,這是正轉的狀況。實現控制反轉以後,由IoC容器實現依賴對象的建立和管理,應用程序須要什麼樣的對象,IoC容器就根據需求建立這個對象,應用程序只是被動地接收和使用這個對象,依賴對象的建立管理控制權由應用程序轉移給了IoC容器,這就實現了控制反轉。正則表達式

二、依賴注入(Dependency Injection):

控制反轉的另外一種表述方式,即讓調用類對某一接口的實現類的依賴關係由第三方(容器或協做類)注入,用以移除調用類對某一接口實現類的依賴。spring

三、Beanfacory 和ApplicationContext:

Spring經過配置文件描述Bean以及Bean之間的依賴關係,利用Java語言的反射功能實例化Bean並創建起Bean之間的依賴關係。Spring的IoC容器在完成這些底層工做的基礎上,提供了Bean實例緩存、生命週期管理、Bean實例代理、事件發佈、資源裝載等服務。數據庫

Beanfacory 是Spring框架最核心的接口,提供了高級IoC的配置機制。Beanfacory使管理不一樣的java對象成爲可能,ApplicationContext(應用上下文)創建在Beanfacory基礎之上,提供更多面向引用的功能。Beanfacory 即爲IoC容器,因爲ApplicationContext創建在Beanfacory,咱們也稱ApplicationContext爲IoC容器。編程

IoC容器主要功能

一、動態建立、注入依賴對象。後端

二、管理對象生命週期。緩存

三、映射依賴關係。session

實現IoC容器的方式:

一、依賴查找。併發

二、依賴注入。

依賴注入的三種方式:一、構造器注入。二、setter注入。三、接口注入。

注入和裝配的區別:

注入是實例化一個類時對類中各個參數的賦值方式。

裝配是定義bean以及bean之間關係。

  • 裝配bean概述:

一、基於xml中配置。

二、基於註解中配置。

三、基於java類配置。

四、基於Groovy DSL配置。

  • Bean做用域:

一、單例(singleton):它是默認的選項,在整個應用中,Spring只爲其生成一個Bean的實例。

二、原型(prototype):每次注入時,或者經過Spring IoC容器獲取Bean時,Spring都會爲它建立一個新的實例。

三、會話(session):在web應用中使用,就是在會話過程當中Spring只會建立一個實例。

四、請求(request):在web應用中使用,就是在一次請求中Spring會建立一個實例,可是不一樣的請求會建立不一樣的實例。

基於xml中配置

一、四種自動裝配類型:

(1)byName:根據名字自行自動匹配。

(2)byType:根據類型自行自動匹配。

(3)construtor:根據構造函數自行自動匹配。

(4)autodetect:根據bean的自省機制選擇byType或者construtor。

二、Bean之間的關係:

(1)繼承;(2)依賴;(3)引用。

基於註解的配置

一、使用註解定義bean

@Component:用於對全部的類進行註解。

@Repository:用於對Dao實現類進行標註。

@Service:用於對Service實現類進行標註。

@controller:用於對controller實現類進行標註。

二、自動裝配

(1)@Autowired:經過@Autowired註解實現Bean的依賴注入。

(2)@Autowired的required屬性:用來指定是否必須找到匹配的Bean。

(3)@Qualifier,指定Bean的名稱。

profile:用於切換開發環境。

Spring EL:

概念:更爲靈活的注入方式,可以在運行時構建複雜表達式,存取對象屬性、對象方法調用等。

做用:

一、使用bean id引用bean。

二、調用指定對象的方法和訪問對象的屬性。

三、進行運算。

四、提供正則表達式進行匹配。

五、集合配置。

(二)面向切面編程(Aspect Oriented Programming)

概述:AOP技術利用"橫切"技術,剖解開封裝的對象內部,並將那些影響了多個類的公共行爲封裝到一個可重用模塊,並將其命名爲"Aspect",即切面。所謂"切面",簡單說就是那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任封裝起來,便於減小系統的重複代碼,下降模塊之間的耦合度,並有利於將來的可操做性和可維護性。

AOP相關概念

一、方面(Aspect):一個關注點的模塊化,這個關注點實現可能另外橫切多個對象。事務管理是J2EE應用中一個很好的橫切關注點例子。方面用Spring的 Advisor或攔截器實現。

二、鏈接點(Joinpoint): 程序執行過程當中明確的點,如方法的調用或特定的異常被拋出。

三、通知(Advice): 在特定的鏈接點,AOP框架執行的動做。各類類型的通知包括「around」、「before」和「throws」通知。通知類型將在下面討論。許多AOP框架包括Spring都是以攔截器作通知模型,維護一個「圍繞」鏈接點的攔截器鏈。Spring中定義了四個advice: BeforeAdvice, AfterAdvice, ThrowAdvice和DynamicIntroductionAdvice。

四、切入點(Pointcut): 指定一個通知將被引起的一系列鏈接點的集合。AOP框架必須容許開發者指定切入點:例如,使用正則表達式。 Spring定義了Pointcut接口,用來組合MethodMatcher和ClassFilter,能夠經過名字很清楚的理解, MethodMatcher是用來檢查目標類的方法是否能夠被應用此通知,而ClassFilter是用來檢查Pointcut是否應該應用到目標類上。

五、引入(Introduction): 添加方法或字段到被通知的類。 Spring容許引入新的接口到任何被通知的對象。例如,你可使用一個引入使任何對象實現 IsModified接口,來簡化緩存。Spring中要使用Introduction, 可有經過DelegatingIntroductionInterceptor來實現通知,經過DefaultIntroductionAdvisor來配置Advice和代理類要實現的接口。

六、目標對象(Target Object): 包含鏈接點的對象。也被稱做被通知或被代理對象。POJO。

七、AOP代理(AOP Proxy): AOP框架建立的對象,包含通知。 在Spring中,AOP代理能夠是JDK動態代理或者CGLIB代理。

八、織入(Weaving): 組裝方面來建立一個被通知對象。這能夠在編譯時完成(例如使用AspectJ編譯器),也能夠在運行時完成。Spring和其餘純Java AOP框架同樣,在運行時完成織入。

  • 前置通知(Before advice): 在某鏈接點(join point)以前執行的通知,但這個通知不能阻止鏈接點前的執行(除非它拋出一個異常)。
  • 後置通知(After advice): 當某鏈接點退出的時候執行的通知(不管是正常返回仍是異常退出)。
  • 環繞通知(Around Advice): 包圍一個鏈接點(join point)的通知,如方法調用。這是最強大的一種通知類型。 環繞通知能夠在方法調用先後完成自定義的行爲。它也會選擇是否繼續執行鏈接點或直接返回它們本身的返回值或拋出異常來結束執行。
  • 返回後通知(After returning advice): 在某鏈接點(join point)正常完成後執行的通知,例如,一個方法沒有拋出任何異常,正常返回。
  • 拋出異常後通知(After throwing advice): 在方法拋出異常退出時執行的通知。

Spring AOP實現的四種方式:

一、使用proxyFactoryBean和對應的接口實現AOP

二、使用XML配置AOP

三、使用@AspectJ註解驅動切面

四、使用AspectJ注入切面

多切面的狀況:

(1)aspect裏面有一個order屬性,order屬性的數字就是橫切關注點的順序。

(2)Spring默認以aspect的定義順序做爲織入順序。

(三)Spring事務管理

一、事務管理器

Spring並不直接管理事務,而是提供了多種事務管理器,他們將事務管理的職責委託給Hibernate或者JTA等持久化機制所提供的相關平臺框架的事務來實現。Spring事務管理器的接口是org.springframework.transaction.PlatformTransactionManager,經過這個接口,Spring爲各個平臺如JDBC、Hibernate等都提供了對應的事務管理器。

二、事務屬性的定義

(1)傳播行爲:

Spring定義了七種傳播行爲,如下爲常見類型:

PROPAGATION_REQUIRED:表示當前方法必須運行在事務中。若是當前事務存在,方法將會在該事務中運行。不然,會啓動一個新的事務

PROPAGATION_SUPPORTS:表示當前方法不須要事務上下文,可是若是存在當前事務的話,那麼該方法會在這個事務中運行

PROPAGATION_MANDATORY:表示該方法必須在事務中運行,若是當前事務不存在,則會拋出一個異常

(2)隔離級別

隔離級別定義了一個事務可能受其餘併發事務影響的程度。

  • ISOLATION_DEFAULT:使用後端數據庫默認的隔離級別
  • ISOLATIONREADUNCOMMITTED:最低的隔離級別,容許讀取還沒有提交的數據變動,可能會致使髒讀、幻讀或不可重複讀.
  • ISOLATIONREADCOMMITTED:容許讀取併發事務已經提交的數據,能夠阻止髒讀,可是幻讀或不可重複讀仍有可能發生
  • ISOLATIONREPEATABLEREAD:對同一字段的屢次讀取結果都是一致的,除非數據是被自己事務本身所修改,能夠阻止髒讀和不可重複讀,但幻讀仍有可能發生
  • ISOLATION_SERIALIZABLE:最高的隔離級別,徹底服從ACID的隔離級別,確保阻止髒讀、不可重複讀以及幻讀,也是最慢的事務隔離級別,由於它一般是經過徹底鎖定事務相關的數據庫表來實現的

(3)只讀:經過將事務設置爲只讀,你就能夠給數據庫一個機會,讓它應用它認爲合適的優化措施。

(4)事務超時:事務超時就是事務的一個定時器,在特定時間內事務若是沒有執行完畢,那麼就會自動回滾,而不是一直等待其結束。

(5)回滾規則:這些規則定義了哪些異常會致使事務回滾而哪些不會。

三、編程式和聲明式事務的區別

Spring提供了對編程式事務和聲明式事務的支持,編程式事務容許用戶在代碼中精肯定義事務的邊界,而聲明式事務(基於AOP)有助於用戶將操做與事務規則進行解耦。

簡單地說,編程式事務侵入到了業務代碼裏面,可是提供了更加詳細的事務管理;而聲明式事務因爲基於AOP,因此既能起到事務管理的做用,又能夠不影響業務代碼的具體實現。

宜信技術學院      做者:姚遠

相關文章
相關標籤/搜索