天天看點

Spring 架構基礎(04):AOP切面程式設計概念,幾種實作方式示範

本文源碼:GitHub·點這裡 || GitEE·點這裡

AOP全稱:Aspect Oriented Programming,面向切面程式設計。通過預編譯方式和運作期動态代理實作程式功能的統一維護的一種技術。核心作用:可以對業務邏輯的各個部分進行隔離,進而使得業務邏輯各部分之間的耦合度降低,提高程式的複用性和開發效率。AOP提供了取代繼承和委托的一種新的方案,而且使用起來更加簡潔清晰,是軟體開發中的一個熱點理念。
Spring 架構基礎(04):AOP切面程式設計概念,幾種實作方式示範

(1)、通知類型:Advice

(2)、連接配接點:JoinPoint

程式執行的某一個特定位置,如類初始前後,方法的運作前後。

(3)、切點:Pointcut

連接配接點是指那些在指定政策下可能被攔截到的方法。

(4)、切面:Aspect

切面由切點和通知的結合。

(5)、引入:Introduction

特殊的增強,為類添加一些屬性和方法。

(6)、織入:Weaving

将增強添加到目标類的具體連接配接點上的過程。編譯期織入,這要求使用特殊編譯器;類裝載期織入,這要求使用特殊的類加載器;動态代理織入,在運作期為目标類添加增強生成子類的方式,Spring采用的是動态代理織入,而AspectJ采用編譯期織入和類裝載期織入。

(7)、代理:Proxy

類被AOP織入後生成一個結果類,它是融合了原類和增強邏輯的代理類。

案例基于如下類進行:

采用位元組碼增強架構cglib,在運作時建立目标類的子類,進而對目标類進行增強。

spring 建立代理對象,從spring容器中手動的擷取代理對象。

配置檔案

切面類

從spring容器獲得目标類,如果配置Aop,spring将自動生成代理。

AspectJ是一個基于Java語言的AOP架構,Spring2.0以後新增了對AspectJ切點表達式支援,通過JDK5注解技術,允許直接在類中定義切面,新版本Spring架構,推薦使用AspectJ方式來開發AOP程式設計。

測試方法

注解切面類

Spring 架構基礎(04):AOP切面程式設計概念,幾種實作方式示範