javascript
《精通Spring 4.x 企业应用开发实战》学习笔记
第四章 IoC容器
4.1 IoC概述
IoC(Inverse of Control 控制反轉),控制是指接口實現類的選擇控制權,反轉是指這種選擇控制權從調用類轉移到外部第三方類或容器的手中。
也就是由Spring容器借由Bean配置來進行控制。
DI(Dependency Injection 依賴注入):讓調用類的某一接口實現類的依賴關系由第三方容器注入,以移除調用類對某一接口實現類的依賴。
由于IoC的概念不太好理解,所以用DI這個概念來代替IoC。
?
第三方容器:
它幫助完成類的初始化和裝配工作,讓開發者從這些底層實現類的實例化、依賴關系裝配等工作中解脫出來,專注于更有意義的業務邏輯開發工作。
Spring容器通過配置文件或注解描述類與類之間的依賴關系,自動完成類的初始化和依賴注入工作。
?
4.4 BeanFactory和ApplicationContext
?
?
第五章 在IoC容器中裝配Bean
在實際應用中,大部分Bean都能以單實例的方式運行,所以Spring將Bean的默認作用域定位singleton。
默認下,ApplicationContext容器在啟動時,自動實例化所有singleton的Bean并緩存于容器中。
采用scope=“prototype”指定非單例作用域的Bean。
?
使用注解定義Bean:
?
?
自動裝配Bean:
@AutoWired默認按類型匹配的方式在容器中查找匹配的Bean。
如果希望Spring即使找不到匹配的Bean完成注入也不要拋出異常,那么可以使用@AutoWired(required=false)進行標注。
如果容器中有一個以上匹配的Bean時,則可通過@Qualifier注解限定Bean的名稱。如:@Qualifier("baseDao")。
雖然Spring支持在屬性和方法上標注@AutoWired,但實際開發中建議在方法上標注@AutoWired,因為這樣更加面向對象,也方便單元測試的編寫。
?
延遲依賴注入:
Spring4.0支持,在Bean上標注@Lazy@AutoWired,不會立即注入屬性,而是延遲到調用此屬性時才注入屬性。
?
?
對標準注解的支持:
@Resource和@Inject這兩個注解和@AutoWire類似。
@Resource默認按名稱匹配注入Bean,要求提供一個Bean名稱的屬性,如果屬性為空,則自動采用標注處的變量名或方法名作為Bean的名稱。
@Inject和@AutoWire同樣也是按類型匹配注入Bean的,只不過沒有required屬性。
?
Bean的作用范圍:
?
?
第七章 Spring AOP基礎
?
?
?
AOP(Aspect Oriented Programing 面向切面編程)
無法通過抽象父類的方法消除重復的橫切代碼,因為橫切邏輯依附在業務類方法的流程中,不能轉移到其他地方去。
AOP將這些分散在各個業務邏輯代碼中的相同代碼通過橫向切割的方式抽取到一個獨立的模塊中。
?
當某個方法需要進行性能監測時,要在業務代碼的前后加上開啟/關閉性能監測的代碼。這些非業務邏輯代碼破壞了業務邏輯的純粹性。
我們希望通過代理的方式將性能監測的橫切代碼從業務類中完全移除,并通過動態代理技術將橫切代碼動態織入目標方法的相應位置。
?
連接點和切點:
連接點是程序執行的某個特定位置,如類初始化前,類初始化后,方法調用前,方法調用后。
連接點相當于數據庫中的記錄,切點相當于查詢條件,一個切點可以匹配多個連接點。
?
增強(Advice):
增強既包含用于添加到目標連接點上的一段執行邏輯,又包含用于定位連接點的方位信息。
增強接口如:BeforeAdvice、AfterReturningAdvice
?
織入:
織入是將增強添加到目標類的具體連接點上的過程。
Spring采用動態代理織入,而AspectJ采用編譯期織入和類裝載期織入。
?
切面(Aspect):
切面由切點和增強組成,Spring AOP是負責實施切面的框架,它將切面所定義的橫切邏輯織入切面所指定的連接點中。
?
增強類型:
前置增強(BeforeAdvice):在目標方法執行前實施增強。
后置增強(AfterReturningAdvice):在目標方法執行后實施增強。
環繞增強(MethodInterceptor):在目標方法執行前后實施增強。
異常拋出增強(ThrowsAdvice):在目標方法拋出異常后實施增強。
引介增強(IntroductionInterceptor):在目標類中添加一些新的方法和屬性。
?
切面類型:
Advisor:一般切面,僅包含一個Advice,它代表的橫切的連接點是所有目標類的所有方法,太寬泛,一般不用。
PointcutAdvisor:具有切點的切面,可以通過類、方法名、方法方位等信息靈活定義切面的連接點。
IntroductionAdvisor:引介切面,對應引介增強的特殊切面,應用于類層面上。
?
Spring采用JDK動態代理和CGLib動態代理技術在運行期織入增強。
Spring只能在方法級別上織入增強。
?
第八章 基于@AspectJ和Schema的AOP
?
注解版增強類型:
@Before:前置增強
@AfterReturning:后置增強
@Around:環繞增強
@AfterThrowing:拋出增強
@After:Final增強,不管拋出異常還是正常退出,該增強都會得到執行
@DeclareParents:引介增強
?
第十一章 Spring的事務管理
Spring允許通過聲明方式,在IoC配置中指定事務的邊界和事務屬性,Spring自動在指定的事務邊界上應用事務屬性。
Spring的聲明式事務管理是通過SpringAOP實現的。
如果使用Spring JDBC和My Batis,可以使用DataSource TransactionManager這個基于數據源的事務管理器。
?
Spring通過模板類降低了開發者使用各種數據持久化技術的難度。
模板類需要綁定數據連接或會話的資源,這些資源是非線程安全的。
Spring使用ThreadLocal解決線程安全的問題。
?
Spring事務傳播行為:
?
?
Spring默認的事務回滾規則為:運行期異常回滾,檢查型異常不回滾。
?
使用注解配置聲明式事務:
使用@Transactional對類或方法進行事務增強的標注。
在配置文件中加入<tx:annotation-driven transaction-manager="txManager"/>,對標注@Transactional的Bean進行加工處理,以織入事務管理切面。
?
?
第十七章 Spring MVC
?
?
?
?
轉載于:https://www.cnblogs.com/mengchunchen/p/9798525.html
總結
以上是生活随笔為你收集整理的《精通Spring 4.x 企业应用开发实战》学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闲话杂谈—至曾经的自己
- 下一篇: 转-测试用例-常用控件