java基于AspectJ(面向切面編程)編碼示例分享
一、基本概念
AspectJ是一種面向切面程序設(shè)計(jì)的基于Java 的實(shí)現(xiàn)。它向 Java 中加入了連接點(diǎn)(Join Point)這個(gè)新概念,其實(shí)它也只是現(xiàn)存的一個(gè) Java概念的名稱而已。它向 Java 語(yǔ)言中加入少許新結(jié)構(gòu):切點(diǎn)(pointcut)、通知(Advice)、類型間聲明(Inter-type declaration)和方面(Aspect)。切點(diǎn)和通知?jiǎng)討B(tài)地影響程序流程,類型間聲明則是靜態(tài)的影響程序的類等級(jí)結(jié)構(gòu),而切面則是對(duì)所有這些新結(jié)構(gòu)的封裝。
基于切面、連接點(diǎn)、切點(diǎn)、通知的概念如下:
Aspect: Aspect 聲明類似于 Java 中的類聲明,在 Aspect 中會(huì)包含著一些 Pointcut 以及相應(yīng)的 Advice。
Joint point:表示在程序中明確定義的點(diǎn),典型的包括方法調(diào)用,對(duì)類成員的訪問以及異常處理程序塊的執(zhí)行等等,它自身還可以嵌套其它 joint point。
Pointcut:表示一組 joint point,這些 joint point 或是通過邏輯關(guān)系組合起來,或是通過通配、正則表達(dá)式等方式集中起來,它定義了相應(yīng)的 Advice 將要發(fā)生的地方。
Advice:Advice 定義了在 pointcut 里面定義的程序點(diǎn)具體要做的操作,它通過 before、after 和 around 來區(qū)別是在每個(gè) joint point 之前、之后還是代替執(zhí)行的代碼。
連接點(diǎn)是程序流中適當(dāng)?shù)囊稽c(diǎn)。切點(diǎn)收集特定的連接點(diǎn)集合和在這些點(diǎn)中的值。一個(gè)通知是當(dāng)一個(gè)連接點(diǎn)到達(dá)時(shí)執(zhí)行的代碼,這些都是 AspectJ的動(dòng)態(tài)部分。其實(shí)連接點(diǎn)就好比是程序中的一條一條的語(yǔ)句,而切點(diǎn)就是特定一條語(yǔ)句處設(shè)置的一個(gè)斷點(diǎn),它收集了斷點(diǎn)處程序棧的信息,而通知就是在這個(gè)斷點(diǎn)前后想要加入的程序代。AspectJ 中也有許多不同種類的類型間聲明, 這就允許程序員修改程序的靜態(tài)結(jié)構(gòu)、 名稱、 類的成員以及類之間的關(guān)系。AspectJ 中的方面是橫切關(guān)注點(diǎn)的模塊單元。它們的行為與 Java語(yǔ)言中的類很象,但是方面還封裝了切點(diǎn)、通知以及類型間聲明
二、如何基于AJDT: AspectJ Development Tools進(jìn)行AOP程序的開發(fā)?
按照ajdt網(wǎng)站上的說明,在eclipse中安裝ajdt插件http://www.eclipse.org/ajdt/
創(chuàng)建AspectJ Project項(xiàng)目
進(jìn)行代碼開發(fā)(本文提供一個(gè)簡(jiǎn)單的示例)
三、簡(jiǎn)單示例:
package aop.test;
public interface FigureElement {
public void setXY(int x,int y);
public void draw();
}
package aop.test;
public class Point implements FigureElement {
public int x;
private int y;
public int getX() {
return x;
}
public String setX(int x) {
System.out.println("設(shè)置x值:x="+x);
this.x = x;
return "返回值是x="+x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Point(){
}
public Point(int x,int y){
this.x=x;
this.y=y;
}
@Override
public void setXY(int x,int y) {
this.x=x;
this.y=y;
System.out.println("Point setXY: x="+x+",y="+y);
}
@Override
public void draw() {
System.out.println("Point draw");
}
@Override
public String toString(){
return "Point: x="+x+",y="+y;
}
}
- 在Android項(xiàng)目中使用AspectJ的方法
- AndroidStudio 配置 AspectJ 環(huán)境實(shí)現(xiàn)AOP的方法
- Spring Aop之AspectJ注解配置實(shí)現(xiàn)日志管理的方法
- Android AOP框架AspectJ使用詳解
- 分析java 中AspectJ切面執(zhí)行兩次的原因
- AspectJ的基本用法
- Android中使用AspectJ詳解
- 詳解Spring Aop實(shí)例之AspectJ注解配置
- Spring使用AspectJ注解和XML配置實(shí)現(xiàn)AOP
- Spring AOP AspectJ使用及配置過程解析
相關(guān)文章
java針對(duì)電話號(hào)碼正則匹配實(shí)例
這篇文章主要介紹了java針對(duì)電話號(hào)碼正則匹配的方法,涉及java正則匹配與字符串操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
SpringBoot中yml多環(huán)境配置的3種方法
這篇文章主要給大家介紹了SpringBoot中yml多環(huán)境配置的3種方法,文中有詳細(xì)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-10-10
利用Postman和Chrome的開發(fā)者功能探究項(xiàng)目(畢業(yè)設(shè)計(jì)項(xiàng)目)
這篇文章主要介紹了利用Postman和Chrome的開發(fā)者功能探究項(xiàng)目(畢業(yè)設(shè)計(jì)項(xiàng)目),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
OpenTelemetry初識(shí)及調(diào)用鏈Trace詳解
這篇文章主要為為大家介紹了OpenTelemetry初識(shí)及調(diào)用鏈Trace詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Java數(shù)據(jù)脫敏實(shí)現(xiàn)的方法總結(jié)
數(shù)據(jù)脫敏,指的是對(duì)某些敏感信息通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實(shí)現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù),本文主要是對(duì)后端數(shù)據(jù)脫敏實(shí)現(xiàn)的簡(jiǎn)單總結(jié),希望對(duì)大家有所幫助2023-07-07
記一次用IDEA打開java項(xiàng)目后不能運(yùn)行的解決方法
這篇文章主要介紹了記一次用IDEA打開java項(xiàng)目后不能運(yùn)行的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Java實(shí)現(xiàn)數(shù)據(jù)脫敏的方法詳細(xì)講解
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)數(shù)據(jù)脫敏的相關(guān)資料,數(shù)據(jù)脫敏是指對(duì)某些敏感信息通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實(shí)現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù),需要的朋友可以參考下2023-06-06
若依 MyBatis改為MyBatis-Plus的實(shí)現(xiàn)步驟
本文主要介紹了若依 MyBatis改為MyBatis-Plus的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08

