Spring課程 Spring入門篇 7-1 AspectJ介紹及PointCut注解應用


課程鏈接:

本節主要是理論型:

關鍵看下節實操。

1    Aspectj是什么

2    如何在Spring中配置@AspectJ

3    組合pointcut的使用

4    切入點支持哪些定義方式

n    aspect java 注解實現要點(不重要)

 

 

 

 

1   Aspectj是什么

AspectJ是一個面向切面的框架。它可以用Java注解的風格進行aop編程。它有一個專門的編譯器用來生成遵守Java字節編碼規范的Class文件。

 

2    如何在Spring中配置@AspectJ

2.1  引入aspectjweaver.jar包的依賴(1.68或1.6.8之上)

2.2  xml中如下配置

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

或者java中如下配置

@Configuration @EnableAspectJAutoProxy public class AppConfig{

)

 

3    組合pointcut的使用

@Pointcut("execution(public*(..))")
private void anyPublicOperation(){}
@Pointcut(
"within(com.xyz.someapp.trading.…)") private void inTrading(){)
@Pointcut(
"anyPublicOperation() && inTrading()") private void tradingOperation(){}

 

4    切入點支持哪些定義方式

execution 匹配方法執行的連接點
within限定匹配特定類型的連接點
this匹配特定連接點的bean引用是指定類型的實例的限制
target限定匹配特定連接點的目標對象是指定類型的實例
args限定匹配特定連接點的參數是給定類型的實例
@target限定匹配特定連接點的類執行對象的具有給定類型的注解
@args 限定匹配特定連接點實際傳入參數的類型具有給定類型的注解
@within限定匹配到內具有給定的注釋類型的連接點
@annotation 限定匹配特定連接點的主體具有給定的注解

 

n    aspect java 注解實現要點(不重要)

@AspectJ切面使用@Aspect注解配置,擁有@Aspect的任何bean將被Spring自動識別並應用
用@Aspect注解的類可以有方法和字段,他們也可能包括切入點(pointcut),通知(Advice)和引入(introduction)聲明

@Aspect注解是不能夠通過類路徑自動檢測發現的,所以需要配合使用@Component注釋或者在xml配置bean

切面所在類不要在xml中掃描

Spring AOP中,不可能有切面自己本身還被其它的切面作為目標通知。用@Aspect注解標注一個類作為切面,因此需要將它自己本身從自動代理中排除。

 什么意思呢?舉個例子,比如

package com.cjs.aspect

 @Aspect

 @Component

public class LogAspect {

  @Pointcut(“execution(* com.cjs..*(..))”)

  public void pointcut() {}

}

在這個例子中,切面LogAspect所在的位置是com.cjs.aspect,而它的切入點是com.cjs下的所有的包的所類的所有方法,這其中就包含LogAspect,這是不對的,會造成循環依賴。在SpringBoot中這樣寫的話啟動的時候就會報錯,會告訴你檢測到循環依賴。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM