怎樣理解Spring的IOC和AOP?


一、什么是AOP和IOC?
二、它們可以解決什么問題?
三、它們之間的關系、
四、怎樣應用他們?

一、什么是AOP和IOC?

AOP和IOC是spring的核心

Spring首先它是一個開源而輕量級的框架。其核心容器的主要組件是Bean工廠(BeanFactory)。Bean工廠使用控制反轉(IOC)模式來降低程序代碼之間的耦合度,並提供了面向切面編程(AOP)的實現。

1.AOP
1.1.AOP 為 Aspect Oriented Programming 的縮寫,意思為面向切面編程,是通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。簡單來說,就是在不修改原代碼碼的情況下對方法進行功能增強。
1.2.底層實現:AOP 的底層是通過 Spring 提供的的動態代理技術實現的。在運行期間,Spring通過動態代理技術動態的生成代理對象,代理對象方法執行時進行增強功能的介入,在去調用目標對象的方法,從而完成功能的增強。
![](https://img2020.cnblogs.com/blog/1827620/202003/1827620-20200303205045091-1808160983.png)
黑線為一個流程代碼,紅線為切入的代碼。即在4個流程中固定位置插入了2個邏輯代碼,如果你不需要的時候,你完全可以撤出紅線代碼,而要修改的話,也只需修改這三個類(紅線)即可,因為主代碼(黑線)和添加代碼(紅線)是沒有耦合的,相當於插拔式的。這就是我們所說的AOP,AOP就是在某一個類或方法執行前后打個標記,聲明在執行到這里之前要先執行什么,執行完這里之后要接着執行什么。插入了新的執行方法。

2.IOC
2.1.什么是IoC:控制反轉(Inversion of Control),又稱為依賴注入(Dependency Injection),把創建對象的控制權交出去,從主動創建對象變為被動接受對象。具體的說就是,在傳統的程序設計中,如果在web層要調用service層的方法,就必須在web層主動創建service層實現類對象,但是在spring中,創建對象的工作不再由調用者主動完成,而是把創建對象的控制權交給spring的bean工廠, 調用者只負責接收這個對象。
2.2.IoC的作用:實現解耦,更准確的說是實現了編譯期解耦,還存在運行期解耦。實現運行期解耦可以引入配置文件對依賴對象的路徑進行配置。

二、它們可以解決什么問題?
Spring 的AOP和IOC都是為了解決系統代碼耦合度過高的問題。使代碼重用度高、易於維護。
IOC:控制反轉,是一種設計模式。一層含義是控制權的轉移:由傳統的在程序中控制依賴轉移到由容器來控制;第二層是依賴注入:將相互依賴的對象分離,在spring配置文件中描述他們的依賴關系。他們的依賴關系只在使用的時候才建立。簡單來說就是不需要NEW一個對象了。
AOP:面向切面,是一種編程思想,OOP的延續。將系統中非核心的業務提取出來,進行單獨處理。比如事務、日志和安全等。這個簡單來說就是可以在一段程序之前或者之后做一些事。

三、它們之間的關系?
無聯系。二者都是Spring的模塊。
![](https://img2020.cnblogs.com/blog/1827620/202003/1827620-20200303212308972-2077854195.png)

四、怎樣應用他們?
4.1.AOP
AOP模塊是Spring的AOP庫,提供了AOP(攔截器)機制,並提供常用的攔截器,供用戶自定義和配置。AOP是OOP的延續.
主要的功能是:日志記錄,性能統計,安全控制,事務處理,異常處理等等
4.2.IOC


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM