Spring AOP基礎簡介
什麼是AOP
AOP即面向切面程式設計。
面向切面——Spring提供了面向切面程式設計的豐富支援,允許透過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用物件只實現它們應該做的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支援。
AOP中的基本概念
通知(Adivce)
通知有5種型別:
Before:在方法被呼叫之前呼叫
After:在方法完成後呼叫通知,無論方法是否執行成功
After-returning:在方法成功執行之後呼叫通知
After-throwing:在方法丟擲異常後呼叫通知
Around:通知了好、包含了被通知的方法,在被通知的方法呼叫之前後呼叫之後執行自定義的行為
切點(Pointcut)
切點在Spring AOP中是對應系統中的方法。但是這個方法是定義在切面中的方法,一般和通知一起使用,一起組成了切面。
連線點(Join point)
比如:方法呼叫、方法執行、欄位設定/獲取、異常處理執行、類初始化、甚至是 for 迴圈中的某個點
理論上, 程式執行過程中的任何時點都可以作為作為織入點, 而所有這些執行時點都是 Joint point
但 Spring AOP 目前僅支援方法執行 (method execution),也可以這樣理解,連線點就是你準備在系統中執行切點和切入通知的地方(一般是一個方法,一個欄位)
切面(Aspect)
切面是切點和通知的集合,一般單獨作為一個類。通知和切點共同定義了關於切面的全部內容,它是什麼時候,在何時和何處完成功能。
引入(Introduction)
引用允許我們向現有的類新增新的方法或者屬性
織入(Weaving)
組裝方面來建立一個被通知物件。這可以在編譯時完成(例如使用AspectJ編譯器),也可以在執行時完成。Spring和其他純Java AOP框架一樣,在執行時完成織入。
Spring中對AOP的支援
首先AOP思想的實現一般都是基於代理模式,在JAVA中一般採用JDK動態代理模式,但是我們都知道,JDK動態代理模式只能代理介面,如果要代理類那麼就不行了。因此,Spring AOP 會這樣子來進行切換,因為Spring AOP 同時支援 CGLIB、ASPECTJ、JDK動態代理,當你的真實物件有實現介面時,Spring AOP會預設採用JDK動態代理,否則採用cglib代理。
如果目標物件的實現類實現了介面,Spring AOP 將會採用 JDK 動態代理來生成 AOP 代理類;
如果目標物件的實現類沒有實現介面,Spring AOP 將會採用 CGLIB 來生成 AOP 代理類——不過這個選擇過程對開發者完全透明、開發者也無需關心。
程式碼示例
定義主題介面,這些介面的方法可以成為我們的連線點
package wokao666.club.aop.spring01;
public interface Subject {
//登陸
public void login();
//下載
public void download();
}
定義實現類,這是代理模式中真正的被代理人(如果你有參與代購,這個就像你在代購中的角色)
package wokao666.club.aop.spring01;
public class SubjectImpl implements Subject {
public void login() {
System.err.println("借書中...");
}
public void download() {
System.err.println("下載中...");
}
}
定義切面(切面中有切點和通知)
package wokao666.club.aop.spring01;
public class PermissionVerification {
/**
* 許可權校驗
* @param args 登陸引數
*/
public void canLogin() {
//做一些登陸校驗
System.err.println("我正在校驗啦!!!!");
}
/** 無錫婦科檢查醫院
* 校驗之後做一些處理(無論是否成功都做處理)
* @param args 許可權校驗引數
*/
public void saveMessage() {
//做一些後置處理
System.err.println("我正在處理啦!!!!");
}
}
SpringAOP.xml檔案
xmlns:xsi="
xmlns:aop="
xmlns:tx="
xsi:schemaLocation="
/spring-beans-4.2.xsd
/spring-aop-4.2.xsd">
測試類和結果
package wokao666.club.aop.spring01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("SpringAOP.xml");
Subject subject1 = (Subject)ctx.getBean("SubjectImpl1");
Subject subject2 = (Subject)ctx.getBean("SubjectImpl2");
subject1.login();
subject1.download();
System.err.println("==================");
subject1.login();
subject1.download();
}
}
資訊: Loading XML bean definitions from class path resource [SpringAOP.xml]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2654414/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring基礎只是—AOP的概念介紹Spring
- Spring(2)-AOP簡介Spring
- AOP簡介
- 【AOP】簡介
- Spring Boot基礎:Spring Boot簡介與快速搭建(1)Spring Boot
- AOP基礎
- Spring AOP介紹Spring
- Spring事物入門簡介及AOP陷阱分析Spring
- JavaScript基礎簡介JavaScript
- Spring第9天Aop簡介,Aopxml開發,Aop註解開發SpringXML
- JAVA-Spring AOP基礎 - 代理設計模式JavaSpring設計模式
- JavaFX基礎:1: 簡介Java
- Oracle基礎工具簡介Oracle
- Spring基礎使用(三)-------XML定義AOP的使用SpringXML
- Spring Aop簡單理解Spring
- Spring AOP 增強介紹Spring
- 【AOP】技術基礎
- CSS基礎知識簡介CSS
- maven簡介及基礎使用Maven
- Spring核心思想之 AOP:在自定義容器基礎上實現AOP功能Spring
- Spring系列.AOP原理簡析Spring
- JavaSpring【五、AOP基礎】JavaSpring
- GOLANG簡介與基礎語法Golang
- web workers簡介(一)基礎使用Web
- iptables基礎原理和使用簡介
- C語言基礎-C簡介C語言
- 《MySQL 8 DBA基礎教程》簡介MySql
- CSS基礎:CSS變數簡介CSS變數
- d3-系列-基礎簡介
- spring aop expression簡單說明SpringExpress
- Spring原始碼系列(三)--spring-aop的基礎元件、架構和使用Spring原始碼元件架構
- 4、Spring+AOP介紹與使用Spring
- C#基礎程式設計——簡介及基礎語法C#程式設計
- Spring 框架基礎(06):Mvc架構模式簡介,執行流程詳解Spring框架MVC架構模式
- Spring Cloud 快速入門(一)簡介、與Dubbo對比、建立基礎工程SpringCloud
- python基礎學習-socket簡介Python
- scrapy框架簡介和基礎應用框架
- TypeScript基礎入門-函式-簡介TypeScript函式