🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 第一步 开启aop支持 ~~~ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; @Configuration @ComponentScan("cn.maicaii.*") /** * 目标对象实现了接口 – 使用CGLIB代理机制 * 目标对象没有接口(只有实现类) – 使用CGLIB代理机制 * false * 目标对象实现了接口 – 使用JDK动态代理机制(代理所有实现了的接口) * 目标对象没有接口(只有实现类) – 使用CGLIB代理机制 */ @EnableAspectJAutoProxy(proxyTargetClass = true) // 第一步 开启aop public class Config { } ~~~ ## 第二部 导入apo jar包 ~~~ <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.7</version> </dependency> ~~~ ## 第三步 编写切面类 ~~~ import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; /** * 切面类 */ @Component @Aspect // 需要导入 aspectjweaver 包 public class UserAspect { /** * 切点 */ @Pointcut("execution(* cn.maicaii.service.*.*(..))") public void pointcut() { } /** * 执行之前 */ @Before("pointcut()") public void before(JoinPoint joinPoint) { System.out.println("执行方法之前执行"); } /** * 当匹配的方法执行 正常 返回时运行。 在 After 之后 */ @AfterReturning(pointcut = "pointcut()", returning = "retVal") public void afterReturning(Object retVal) { System.out.println(retVal); System.out.println("执行方法正常 返回时运行时 执行"); } /** * 执行之后 */ @After("pointcut()") public void after() { System.out.println("执行方法之后执行"); } /** * 当匹配的方法执行通过抛出异常退出时,抛出通知运行后。您可以使用@AfterThrowing注解来声明它 */ @AfterThrowing("pointcut()") public void afterThrowing(){ System.out.println("执行方法时有异常时执行"); } /** * 环绕通知 */ @Around("pointcut()") public void around(ProceedingJoinPoint point) throws Throwable { System.out.println("环绕通知之前"); point.proceed(); System.out.println("环绕通知之后"); } } ~~~