AOP的兩種實現方式

大家都知道spring最大的特點就IOC和AOP,IOC是最常用的注入,就是被注入的類上加@Component註解,在需要用到時候,通過 @Autowired注入,不用每次都new出來。當然爲了分清層級,@Component通常使用@Repository、@Service、@Controller代替。

本文只要記錄AOP的用法,以springboot框架爲例。

個人理解AOP就是攔截器,(可能是我理解不全面,反正我現在就認爲它是攔截器,攔截器!攔截器!只不過娶個英文名字而已)。
功能:AOP可以在做某些事情之前或之後強塞一些操作。

我知道的有兩種實現方法,路徑切入和註解切入,區別在於切點,兩者各有利弊,前者適合批量切入,後者比較靈活,加註解的類纔會被切。

1、通過路徑切入
2、通過註解切入

路徑切入

1、類上面加倆註解 @Aspect @Component 缺一不可
2、@Pointcut寫上要切入的包,也可以精確到類
3、@Before切入點之前要處理的業務
4、@After切入點之後要處理的業務

@Aspect
@Component
public class VisitAop {
    
  @Pointcut("execution(public * com.forum.controller.*.*(..))")
  public void log() {
  }

  @Before("log()")
  public void doBefore(JoinPoint joinPoint) {
        ........
  }
  
  @After("log()")
  public void doAfter() {
        ........
  }
}

註解切入

1、自定義註解
2、切入類@Aspect @Component 缺一不可
3、@Pointcut寫上要切入註解(意思是帶此註解者,必切!)
4、@Before、@After同上。

1、自定義註解
1.1 @Target和@Retention定義自定義註解,無需其他,標識作用的註解。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface VisitCount {
}

3、切入點
3.1和路徑切入的區別在此

@Pointcut("@annotation(com.Annotation.VisitCount)")

JoinPoint

此外可以瞭解一些doBefore(),的參數JoinPoint,以便操作業務;

1、joinPoint.getSignature().getDeclaringType().getSimpleName(),切入的類名
2、joinPoint.getArgs(),切入方法的參數數組
3、joinPoint.getSignature().getName(),切入方法名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章