org.example;1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.stereotype.Component;/** * aop组件 */@Aspect@Componentpublic class AspectComponent { @Pointcut("execution(* org.example.*.*(..))") public void pointCut(){ } // 在目标方法 没有执行的时候开始执行 一般用于改变某个方法的入参值 @Before("pointCut()") public void before(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); User arg = (User) args[0]; System.out.println(arg.getName()+"xingming"); arg.setName("doulongfe"); System.out.println(args); System.out.println("before------------"+joinPoint.toString()); } // 在目标方法执行return前执行 一般可以用于在return前执行插入的业务逻辑 @After("pointCut()") public void after(JoinPoint joinPoint) { Object target = joinPoint.getTarget(); System.out.println(target); System.out.println("after-----------"+joinPoint.toString()); } // 如果同时使用了@Around 这个切面方法的话,这里的返回值是@Around方法的返回值。并不是原来方法的返回值。【出现异常,不执行】 // 一般用于 修改返回值,或者拿到返回值后再执行自己一段业务逻辑 @AfterReturning(pointcut = "pointCut()", returning = "returnVal") public void afterReturning(JoinPoint joinPoint, Object returnVal) { User user = (User) returnVal; System.out.println(user+"更新后返回值"); System.out.println("afterReturning--------------" + returnVal +joinPoint.toString()); } // 一顶要把pjp.proceed();的值return出去,否则会是@AfterReturning 拿不到返回值。 @Around("pointCut()") public Object around(ProceedingJoinPoint pjp) throws Throwable { System.out.println("around start-------===========--------"); try { Object proceed = pjp.proceed(); System.out.println(proceed+"返回值"); return proceed; } catch (Throwable ex) { System.out.println("error in around");// throw ex; } System.out.println("around end---------===============-----------"); return null; } @AfterThrowing(pointcut = "pointCut()", throwing = "error") public void afterThrowing(JoinPoint joinPoint, Throwable error) { System.out.println("error:" + error+joinPoint.toString()); } // @Around ==》 @Before ==》 @Around ==》 @After ==》 @AfterReturning // @AfterThrowing : 执行目标方法时发生了异常,导致目标方法结束执行。然后@AfterReturning不会执行(目标方法是抛出异常)。目标方法自己有 // try-catch没有抛出异常,@AfterReturning会正常执行,只不过拿到的返回值为null。}