在配置类中使用 @EnableAspectJAutoProxy 才能使Aspect生效,在这篇文章中详细分析该注解的作用原理。
切面类使用 @Aspect 声明,同时需要@Component注册为组件(或用其他方式,Aspect不会自动注册为Spring组件)
切面类有以下主要功能(用法详见代码部分):
- @PointCut:使用execution切入表达式声明需要增强的方法(其他注解也可直接声明,但为了防止代码冗余,可使用此注解标注一个方法,再在其他注解中直接引用该方法即可)
- @Before:方法执行前调用
- @After:方法执行后调用
- @AfterReturning:方法返回结果后调用(执行后),returning参数指定返回结果
- @AfterThrowing:抛出异常后调用,throwing参数指定异常信息
- @Around:环绕通知,可以手动调用方法执行并返回结果,使用ProceedingJoinPoint参数调用。
- JoinPoint:可作为被标注的方法的参数传入,有很多有用的get方法
例子:
先看结果
简要代码
切面类:
@Aspect
@Component
public class Log {
@Pointcut(value = "execution(public int cap.other.Div.*(..))")
private void pointCut(){
}
@Before("pointCut()")
private void logStart(@NotNull JoinPoint joinPoint){
System.out.println("Start>>> Args:" + Arrays.asList(joinPoint