您好,登錄后才能下訂單哦!
1)控制反轉(Inversion of control)
控制反轉是一種通過描述(在java中通過xml或者注解)并通過第三方去產生或獲取特定對象的方式。
控制反轉IoC(Inversion of Control)是說創建對象的控制權進行轉移,以前創建對象的主動權和創建時機是由自己把控的,而現在這種權力轉移到第三方,比如轉移交給了IoC容器,它就是一個專門用來創建對象的工廠,你要什么對象,它就給你什么對象,有了 IoC容器,依賴關系就變了,原先的依賴關系就沒了,它們都依賴IoC容器了,通過IoC容器來建立它們之間的關系。
控制反轉就是獲取依賴對象的方式反轉了,正常情況下由應用程序主動創建依賴對象,實現對依賴對象的管理,創建依賴對象的控制權在應用程序手中,應用程序需要什么對象,就主動去創建這個對象,這是正轉的情況。實現控制反轉之后,由IoC容器實現依賴對象的創建和管理,應用程序需要什么樣的對象,IoC容器就根據需求創建這個對象,應用程序只是被動地接收和使用這個對象,依賴對象的創建管理控制權由應用程序轉移給了IoC容器,這就實現了控制反轉。
2)依賴注入(Dependency Injection)
控制反轉的另一種表述方式,即讓調用類對某一接口的實現類的依賴關系由第三方(容器或協作類)注入,用以移除調用類對某一接口實現類的依賴。
3)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容器主要功能
動態創建、注入依賴對象。
管理對象生命周期。
映射依賴關系。
實現IoC容器的方式
依賴查找。
依賴注入。
依賴注入的三種方式
注入和裝配的區別
注入是實例化一個類時對類中各個參數的賦值方式。
裝配是定義bean以及bean之間關系。
裝配bean概述:
基于xml中配置。
基于注解中配置。
基于java類配置。
基于Groovy DSL配置。
Bean作用域:
單例(singleton):它是默認的選項,在整個應用中,Spring只為其生成一個Bean的實例。
原型(prototype):每次注入時,或者通過Spring IoC容器獲取Bean時,Spring都會為它創建一個新的實例。
會話(session):在web應用中使用,就是在會話過程中Spring只會創建一個實例。
請求(request):在web應用中使用,就是在一次請求中Spring會創建一個實例,但是不同的請求會創建不同的實例。
1)四種自動裝配類型
byName:根據名字自行自動匹配。
byType:根據類型自行自動匹配。
construtor:根據構造函數自行自動匹配。
autodetect:根據bean的自省機制選擇byType或者construtor。
2)Bean之間的關系
1)使用注解定義bean
2)自動裝配
@Autowired:通過@Autowired注解實現Bean的依賴注入。
@Autowired的required屬性:用來指定是否必須找到匹配的Bean。
@Qualifier,指定Bean的名稱。
profile:用于切換開發環境。
Spring EL:更為靈活的注入方式,能夠在運行時構建復雜表達式,存取對象屬性、對象方法調用等。
作用
使用bean id引用bean。
調用指定對象的方法和訪問對象的屬性。
進行運算。
提供正則表達式進行匹配。
集合配置。
概述:AOP技術利用"橫切"技術,剖解開封裝的對象內部,并將那些影響了多個類的公共行為封裝到一個可重用模塊,并將其命名為"Aspect",即切面。所謂"切面",簡單說就是那些與業務無關,卻為業務模塊所共同調用的邏輯或責任封裝起來,便于減少系統的重復代碼,降低模塊之間的耦合度,并有利于未來的可操作性和可維護性。
方面(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): 在方法拋出異常退出時執行的通知。
使用proxyFactoryBean和對應的接口實現AOP
使用XML配置AOP
使用@AspectJ注解驅動切面
使用AspectJ注入切面
aspect里面有一個order屬性,order屬性的數字就是橫切關注點的順序。
Spring默認以aspect的定義順序作為織入順序。
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,所以既能起到事務管理的作用,又可以不影響業務代碼的具體實現。
作者:姚遠
來源: 宜信技術學院
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。