java Spring框架IOC和AOP的實現原理
IoC(Inversion of Control)
(1). IoC(Inversion of Control)是指容器控制程式物件之間的關係,而不是傳統實現中,由程式程式碼直接操控。控制權由應用程式碼中轉到了外部容器,控制權的轉移是所謂反轉。 對於Spring而言,就是由Spring來控制物件的生命週期和物件之間的關係;IoC還有另外一個名字——“依賴注入(Dependency Injection)”。從名字上理解,所謂依賴注入,即元件之間的依賴關係由容器在執行期決定,即由容器動態地將某種依賴關係注入到元件之中。
(2). 在Spring的工作方式中,所有的類都會在spring容器中登記,告訴spring這是個什麼東西,你需要什麼東西,然後spring會在系統執行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類的建立、銷燬都由 spring來控制,也就是說控制物件生存週期的不再是引用它的物件,而是spring。對於某個具體的物件而言,以前是它控制其他物件,現在是所有物件都被spring控制,所以這叫控制反轉。
(3). 在系統執行中,動態的向某個物件提供它所需要的其他物件。
(4). 依賴注入的思想是通過反射機制實現的,在例項化一個類時,它通過反射呼叫類中set方法將事先儲存在HashMap中的類屬性注入到類中。 總而言之,在傳統的物件建立方式中,通常由呼叫者來建立被呼叫者的例項,而在Spring中建立被呼叫者的工作由Spring來完成,然後注入呼叫者,即所謂的依賴注入or控制反轉。 注入方式有兩種:依賴注入和設定注入; IoC的優點:降低了元件之間的耦合,降低了業務物件之間替換的複雜性,使之能夠靈活的管理物件。
AOP(Aspect Oriented Programming)
(1). AOP面向方面程式設計基於IoC,是對OOP的有益補充;
(2). AOP利用一種稱為“橫切”的技術,剖解開封裝的物件內部,並將那些影響了 多個類的公共行為封裝到一個可重用模組,並將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模組所共同呼叫的 邏輯或責任封裝起來,比如日誌記錄,便於減少系統的重複程式碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。
(3). AOP代表的是一個橫向的關 系,將“物件”比作一個空心的圓柱體,其中封裝的是物件的屬性和行為;則面向方面程式設計的方法,就是將這個圓柱體以切面形式剖開,選擇性的提供業務邏輯。而 剖開的切面,也就是所謂的“方面”了。然後它又以巧奪天功的妙手將這些剖開的切面復原,不留痕跡,但完成了效果。
(4). 實現AOP的技術,主要分為兩大類:一是採用動態代理技術,利用擷取訊息的方式,對該訊息進行裝飾,以取代原有物件行為的執行;二是採用靜態織入的方式,引入特定的語法建立“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的程式碼。
(5). Spring實現AOP:JDK動態代理和CGLIB代理 JDK動態代理:其代理物件必須是某個介面的實現,它是通過在執行期間建立一個介面的實現類來完成對目標物件的代理;其核心的兩個類是InvocationHandler和Proxy。 CGLIB代理:實現原理類似於JDK動態代理,只是它在執行期間生成的代理物件是針對目標類擴充套件的子類。CGLIB是高效的程式碼生成包,底層是依靠ASM(開源的java位元組碼編輯類庫)操作位元組碼實現的,效能比JDK強;需要引入包asm.jar和cglib.jar。 使用AspectJ注入式切面和@AspectJ註解驅動的切面實際上底層也是通過動態代理實現的。
(6). AOP使用場景:
Authentication 許可權檢查
Caching 快取
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 延遲載入
Debugging 除錯
logging, tracing, profiling and monitoring 日誌記錄,跟蹤,優化,校準
Performance optimization 效能優化,效率檢查
Persistence 持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務管理
另外Filter的實現和struts2的攔截器的實現都是AOP思想的體現。
相關文章
- Spring框架系列(9) - Spring AOP實現原理詳解之AOP切面的實現Spring框架
- spring ioc和aopSpring
- Spring框架系列(10) - Spring AOP實現原理詳解之AOP代理的建立Spring框架
- Spring AOP的實現原理Spring
- 【Spring】AOP實現原理Spring
- Spring AOP實現原理Spring
- Spring框架系列(7) - Spring IOC實現原理詳解之IOC初始化流程Spring框架
- Spring框架系列(12) - Spring AOP實現原理詳解之JDK代理實現Spring框架JDK
- Spring框架系列(11) - Spring AOP實現原理詳解之Cglib代理實現Spring框架CGLib
- spring入門aop和iocSpring
- 如何理解Spring中的IOC和AOPSpring
- Spring AOP IOCSpring
- 面試:spring ioc實現原理面試Spring
- Java面試題:Spring框架除了IOC和AOP,還有哪些好玩的設計模式?Java面試題Spring框架設計模式
- Spring框架系列(6) - Spring IOC實現原理詳解之IOC體系結構設計Spring框架
- spring-AOP(一)實現原理Spring
- Spring IOC/AOP原理極簡概念入門Spring
- 理解Spring(二):AOP 的概念與實現原理Spring
- BeanPostProcessor——連線Spring IOC和AOP的橋樑BeanSpring
- Spring系列之IOC的原理及手動實現Spring
- 仿寫一個簡陋的 IOC/AOP 框架 mini-spring框架Spring
- Spring系列之AOP的原理及手動實現Spring
- 簡易版的Spring框架之IOC簡單實現Spring框架
- Spring Boot之IOC&AOPSpring Boot
- 淺析Spring中AOP的實現原理——動態代理Spring
- 好程式設計師Java乾貨分享Spring框架之IOC原理程式設計師JavaSpring框架
- Spring——AOP實現Spring
- 最詳細的spring(IOC、AOP)教程Spring
- Spring Ioc原始碼分析系列--@Autowired註解的實現原理Spring原始碼
- Spring原始碼剖析7:AOP實現原理詳解Spring原始碼
- 15-Spring AOP的底層實現原理JDKProxy&CGLIBSpringJDKCGLib
- spring:spring再總結(ioc、aop、DI等)Spring
- Spring學習之——手寫Spring原始碼V2.0(實現IOC、DI、MVC、AOP)Spring原始碼MVC
- Java開發必讀,談談對Spring IOC與AOP的理解JavaSpring
- Spring之AOP實現Spring
- Spring AOP 的實現機制Spring
- 死磕Spring之IoC篇 - @Autowired 等註解的實現原理Spring
- 死磕Spring之IoC篇 - @Bean 等註解的實現原理SpringBean
- Spring系列:基於Spring-AOP和Spring-Aspects實現AOP切面程式設計Spring程式設計