本篇內容介紹了“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("我正在校驗啦!!!!");
}
/**無錫婦科檢查醫院 http://www.87554006.com/
* 校驗之后做一些處理(無論是否成功都做處理)
* @param args 權限校驗參數
*/
public void saveMessage() {
//做一些后置處理
System.err.println("我正在處理啦!!!!");
}
}
SpringAOP.xml文件
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/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();
}
}
“Spring AOP基本概念是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。