網站首頁 編程語言 正文
什么是 AOP?
AOP(Aspect-Oriented Programming),即 面向切面編程,
它與OOP( ObjectOriented Programming, 面向對象編程) 相輔相成,提供了與OOP 不同的抽象軟件結構的視角
在 OOP 中, 我們以類(class)作為我們的基本單元
而 AOP 中的基本單元是 Aspect(切面)
對于 Spring IOC 和 AOP 的理解?
IOC
IOC(Inverse of Control:控制反轉)是一種設計思想,就是將原本在程序中手動創建對象的控制權,交由Spring框架來管理。
IOC 在其他語言中也有應用,并非 Spring 特有。
IOC 容器是 Spring 用來實現 IOC 的載體,IOC 容器實際上就是個Map(key,value),Map 中存放的是各種對象。
將對象之間的相互依賴關系交給IOC 容器來管理,并由 IoC 容器完成對象的注入,簡化開發。
IOC 容器就像是一個工廠一樣,當需要創建一個對象的時候, 只需要配置好配置文件/注解即可,完全不用考慮對象是如何被創建出來的。 在實際項目中一個 Service 類可能有幾百甚至上千個類作為它的底層, 假如我們需要實例化這個 Service,可能要每次都要搞清這個 Service 所有底層類的構造函數,這可能會把人逼瘋。如果利用IOC 的話,你只需要配置好,然后在需要的地方引用就行了,這大大增加了項目的可維護性且降低了開發難度。
Spring 時代一般通過 XML 文件來配置 Bean,后來開發人員覺得 XML 文件來配置不太好,于是 SpringBoot 注解配置就慢慢開始流行起來。
Spring IOC 的初始化過程:
xml--讀取-->Resource--解析-->BeanDefinition--注冊-->BeanFactory
AOP
AOP(Aspect-Oriented Programming:面向切面編程)
能夠將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任(例如事務處理、日志管理、權 限控制等)封裝起來,便于減少系統的重復代碼,降低模塊間的耦合度,并有利于未來的可拓展性和可維護性。
Spring AOP就是基于動態代理的,
如果要代理的對象,實現了某個接口,那么Spring AOP會使用JDK Proxy,去創建代理對象,而對于沒有實現接口的對象,就無法使用 JDK Proxy 去進行代理了,
這時候Spring AOP會使用 Cglib ,這時候Spring AOP會使用 Cglib 生成一個被代理對象的子類來作為代理,如下圖所示:
當然也可以使用 AspectJ ,Spring AOP 已經集成了AspectJ ,AspectJ 是 Java 生態系統中最完整的 AOP 框架了。
使用 AOP 之后可以把一些通用功能抽象出來,在需要用到的地方直接使用即可,這樣大大簡化了代碼量。我們需要增加新功能時也方便,這樣也提高了系統擴展性,日志功能、事務管理等等場景都用到了 AOP 。
原文鏈接:https://blog.csdn.net/qq_52963857/article/details/131586602
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-11-29 React?中?memo?useMemo?useCallback?到底該怎么用_React
- 2023-04-18 Android粒子線條效果實現過程與代碼_Android
- 2022-03-19 C語言結合ffmpeg打印音視頻信息_C 語言
- 2023-02-06 C語言實現文件讀寫功能流程_C 語言
- 2023-01-10 Go?Slice進行參數傳遞如何實現詳解_Golang
- 2022-07-12 快速上手Vim編輯器
- 2022-04-02 C語言冒泡排序算法代碼詳解_C 語言
- 2022-03-29 C語言全排列回溯算法介紹_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支