1. 程式人生 > >通俗易懂的AOP(面向切面程式設計)

通俗易懂的AOP(面向切面程式設計)

本文旨在幫助還沒有理解AOP的童鞋看透弄懂AOP,也歡迎高手批評指正。

先說一個Spring是什麼吧,大家都是它是一個框架,但框架這個詞對新手有點抽象,以致於越解釋越模糊,不過它確實是個框架的,但那是從功能的角度來定義的,從本質意義上來講,Spring是一個庫,一個Java庫,所以我個人覺得應該這樣回答Spring是什麼:Spring是一個庫,它的功能是提供了一個軟體框架,這個框架目的是使軟體之間的邏輯更加清晰,配置更靈活,實現這個目的的手段使用AOP和IoC,而AOP和IoC是一種思想,是一種什麼樣的思想呢,等下細說,先說AOP在Java裡是利用反射機制實現(你也可以認為是動態代理,不過動態代理也是反射機制實現的,所以還是先不要管動態代理,我們這裡化繁為簡,不讓它干擾咱們對AOP的理解),如何使用AOP呢,很簡單滴,等下介紹。

下面先說AOP是什麼樣的思想,我們一步一步慢慢來,先看一下傳統程式的流程,比如銀行系統會有一個取款流程
這裡寫圖片描述

我們可以把方框裡的流程合為一個,另外系統還會有一個查詢餘額流程,我們先把這兩個流程放到一起:
這裡寫圖片描述

有沒有發現,這個兩者有一個相同的驗證流程,我們先把它們圈起來再說下一步:
這裡寫圖片描述

有沒有想過可以把這個驗證使用者的程式碼是提取出來,不放到主流程裡去呢,這就是AOP的作用了,有了AOP,你寫程式碼時不要把這個驗證使用者步驟寫進去,即完全不考慮驗證使用者,你寫完之後,在另我一個地方,寫好驗證使用者的程式碼,然後告訴Spring你要把這段程式碼加到哪幾個地方,Spring就會幫你加過去,而不要你自己Copy過去,這裡還是兩個地方,如果你有多個控制流呢,這個寫程式碼的方法可以大大減少你的時間,不過AOP的目的不是這樣,這只是一個“副作用”,真正目的是,你寫程式碼的時候,事先只需考慮主流程,而不用考慮那些不重要的流程,懂C的都知道,良好的風格要求在函式起始處驗證引數,如果在C上可以用AOP,就可以先不管校驗引數的問題,事後使用AOP就可以隔山打牛的給所有函式一次性加入校驗程式碼,而你只需要寫一次校驗程式碼。不知道C的沒關係,舉一個通用的例子,經常在debug的時候要打log吧,你也可以寫好主要程式碼之後,把打log的程式碼寫到另一個單獨的地方,然後命令AOP把你的程式碼加過去,注意AOP不會把程式碼加到原始檔裡,但是它會正確的影響最終的機器程式碼。

現在大概明白了AOP了嗎,我們來理一下頭緒,上面那個方框像不像個平面,你可以把它當塊板子,這塊板子插入一些控制流程,這塊板子就可以當成是AOP中的一個切面。所以AOP的本質是在一系列縱向的控制流程中,把那些相同的子流程提取成一個橫向的面,這句話應該好理解吧,我們把縱向流程畫成一條直線,然把相同的部分以綠色突出,如下圖左,而AOP相當於把相同的地方連一條橫線,如下圖右,這個圖沒畫好,大家明白意思就行。
這裡寫圖片描述這裡寫圖片描述

這個驗證使用者這個子流程就成了一個條線,也可以理解成一個切面,aspect的意思我認為是方面,你用什麼實物去類比,只要你能理解都可以。這裡的切面只插了兩三個流程,如果其它流程也需要這個子流程,也可以插到其它地方去。

相關推薦

通俗易懂AOP(面向切面程式設計)

本文旨在幫助還沒有理解AOP的童鞋看透弄懂AOP,也歡迎高手批評指正。 先說一個Spring是什麼吧,大家都是它是一個框架,但框架這個詞對新手有點抽象,以致於越解釋越模糊,不過它確實是個框架的,但那是從功能的角度來定義的,從本質意義上來講,Spring是一個庫

3.AOP面向切面程式設計

1. 首先我要控制事務,要想控制事務就得使用一個connection 所以只能提取出來connection 所以注重物件的注入 這個重點就是怎麼注入的問題? 重點:加強聯絡 IOC 2. 1.怎麼踢掉重複程式碼? 2.動態代理!AOP 作用就是在

Spring Boot實戰系列(3)AOP面向切面程式設計

AOP是一種與語言無關的程式思想、程式設計正規化。專案業務邏輯中,將通用的模組以水平切割的方式進行分離統一處理,常用於日誌、許可權控制、異常處理等業務中。 快速導航 引入AOP依賴 AOP常用註解解析 實現日誌分割功能 @Pointcut 新增切入點 @Be

第二天 : AOP 面向切面程式設計 、 JdbcTemplete 工具類使用

AOP 面向切面程式設計 、 JdbcTemplete 工具類使用 目錄 一、 什麼是 AOP ***** 二、 AOP 的底層實現 1、 JDK動態代理 2、 使用CGlib 完成動態代理 三、 Spring AOP 1、 傳統Spring AOP 提供

Spring之註解實現aop(面向切面程式設計)

1:Aop(aspect object programming)面向切面程式設計,名詞解釋:     1.1:功能:讓關注點程式碼與業務邏輯程式碼分離     1.2:關注點       

Spring(2)之 (AOP 面向切面程式設計)(AOP目錄)

Spring Core: Spring的核心功能即IOC容器,解決物件的建立及物件之間的依賴關係 Spring WEB: Spring對WEB模組的支援 Spring AOP: 面向切面程式設計 AOP的概述 AOP的底層實現 Spring AOP開發

從原始碼入手,一文帶你讀懂Spring AOP面向切面程式設計

基於這兩者的實現上,這次來探索下Spring的AOP原理。雖然AOP是基於Spring容器和動態代理,但不瞭解這兩者原理也絲毫不影響理解AOP的原理實現,因為大家起碼都會用。 AOP,Aspect Oriented Programming,面向切面程式設計。在很多

瞭解AOP(面向切面程式設計)與OOP(面向物件程式設計

AOP,他是一種思想,是OOP的延展。 1, 說OOP就來說下之前的OPP,最早開始的程式,一個函式(方法)或者說是功能做一個事情,這種思想劃分的是一個功能一個功能的來組合解決問題。 後來人們發現,功能解決問題是解決了,但是功能太多了,人腦實在是有限,

spring aop(面向切面程式設計)

aop分為兩種,一種是靜態代理(不常用),另一種是動態代理  。 靜態代理的優點,及缺點: 優點:代理是客戶端不需要知道實現類是什麼,怎麼做的,客戶只需要知道代理就可以了。缺點:代理類和委託類都實現了相同的介面,代理類通過委託類實現了相同的方法,這樣就出現了大量的程式碼重

Spring AOP面向切面程式設計:理解篇(一看就明白)

一、到底什麼是AOP(面向切面程式設計)? 無論在學習或者面試的時候,大家都會張口說spring的特性AOP和IOC(控制反轉咱們下一篇講),有些大神理解的很到位,但是對於大多數初中級工程師來講還是模糊階段,但是為什麼會有AOP這種技術呢?傻瓜都知道:為了開發者的方便!

Spring詳解篇之 AOP面向切面程式設計

Aop(aspect oriented programming面向切面程式設計),是spring框架的另一個特徵。AOP包括切面、連線點、通知(advice)、切入點(pointCut) 。 1.aop幾個概念: 橫切關注點: 對哪些方面進行攔截,攔截後怎麼處理。 切面

AOP面向切面程式設計的應用

前兩年看書的時候,瞭解到了面向切面程式設計方法(AOP)。對這個技術印象最深刻的特點就是可以實現業務邏輯和許可權、異常處理等的分離。正好在做專案的時候,有些場景可以借鑑這個思想,於是在專案中借用開源的.net環境的KingAOP實現了選單按鈕許可權控制、上下游

Java框架之Spring AOP 面向切面程式設計 有哪幾種實現方式?如何選擇適合的AOP實現方式?

文章目錄 1. 實現方式 2. JDK動態代理如何實現? 2.1 主要的實現過程 3. 如何選擇? 1. 實現方式 JDK 動態代理實現和 cglib 實現 2. JDK

Spring Boot之AOP面向切面程式設計-實戰篇

目錄 前言 程式設計正規化主要有以下幾類 引入pom依賴 aop註解 實現日誌分割功能 前言 AOP是一種與語言無關的程式思想、程式設計正規化。專案業務邏輯中,將通用的模組以水平切割的方式進行分離統一處理,常用於日誌、許可權控制、異常處理等業務中。 程式設計正規化主

Spring AOP面向切面程式設計之日誌記錄

實際專案中我們往往需要將一些重要的操作,以日誌的形式進行儲存,當機器宕機的時候,可以通過查詢日誌,定位出錯位置,方便恢復。 1:首先匯入spring支援的AOP架包 2:編寫將要進行切面工作的類 /** * */ package com.zhiyou100.aspect; i

Spring AOP面向切面程式設計詳解(基於XML方式 註解方式 注入Aspectj方式)

前言 AOP即面向切面程式設計,是一種程式設計思想,OOP的延續。在程式開發中主要用來解決一些系統層面上的問題,比如日誌,事務,許可權等等。在閱讀本文前希望您已經對Spring有一定的瞭解 注:在能對程式碼進行添加註解方式實現AOP的話,並不推薦使用XML方

Spring框架之AOP面向切面程式設計

package com.jredu.aop.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; im

從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面程式設計淺解析:簡單日誌記錄 + 服務切面快取

  今天的講解就到了這裡了,通過這兩個小栗子,大家應該能對面向切面程式設計有一些朦朧的感覺了吧

core學習歷程五 從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面程式設計淺解析:簡單日誌記錄 + 服務切面快取 從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架之十一 || AOP自定義篩選,Redis入門 11.1

繼續學習 “老張的哲學”博主的系列教程,感謝大神們的無私分享 從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面程式設計淺解析:簡單日誌記錄 + 服務切面快取 說是朦朧,,emmm,對我來說是迷糊哈。上半段正常,下半段有點難理解,操作是沒問題。多看幾遍再消

【spring-boot】spring aop 面向切面程式設計初接觸

眾所周知,spring最核心的兩個功能是aop和ioc,即面向切面,控制反轉。這裡我們探討一下如何使用spring aop。 1.何為aop   aop全稱Aspect Oriented Programming,面向切面,AOP主要實現的目的是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個