通知的配置语法:@通知注解(“切点表达式")
这几个 对应的 注解就是 这几个了啊。
直接在切面中的方法 直接 注解 贼方便啊 !!
我们示范一下 环绕 和 最终没其他的自己测试:
package com.bihu.anno;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Component("MyAspect") //注册Bean
@Aspect //注册切面类
public class MyAspect {
//环绕通知【不管是用注解还是配置 参数都需要一个切点类】
@Around("execution(* com.bihu.anno.*.*(..))")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("环绕前代码通知增强");
Object proceed = pjp.proceed();
System.out.println("环绕后代码通知增强");
return proceed;
}
//最终通知
@After("execution(* com.bihu.anno.*.*(..))") // 配置前置通知 和 切点表达式
public void after() {
System.out.println("前置代码增强");
}
}
注意看注释,是不是很容易列,贼方便
运行结果:
所以 ,是吧 贼方便。
2. 切点表达式的抽取
同 xml 配置 aop 一样,我们可以将切点表达式抽取。抽取方式是在切面内定义方法,在该方法上使用@Pointcut 注解定义切点表达式,然后在在增强注解中进行引用。具体如下:
说白了就是定义一个空方法,然后在空方法中引用 @Pointcut 注解 ,最后的 切点表达式都可以引用这个空方法(2种方式):
package com.bihu.anno;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Component("MyAspect") //注册Bean
@Aspect //注册切面类
public class MyAspect {
//环绕通知
@Around("pointcut()") //引用切点表达式的第一种方式 直接:方法名()
public Object around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("环绕前代码通知增强");
Object proceed = pjp.proceed();
System.out.println("环绕后代码通知增强");
return proceed;
}
//最终通知
@After("MyAspect.pointcut()") //引用切点表达式的第 二 种方式 直接:类名.方法名()
public void after() {
System.out.println("前置代码增强");
}
//定义切点表达式
@Pointcut("execution(* com.bihu.anno.*.*(..))")
public void pointcut(){
}
}
抽取切点表达式 后 引用的 2 种 方式都写出来了 ,具体,自己去看看,非常容易。
作者:咸瑜