spring boot 集成aop

  在日常码代码的过程中,我们经常会遇到很多重复性的,跟业务无关的代码,比如日志打印、权限控制等等,这个时候很多人就会祭出ctrl+c,ctrl+v大法。虽然也解决了问题,但在后期维护过程中,对后面接坑的人来说就很不友好了(没错,我就是那个接坑的TAT)。这个时候就该我们的aop出场了。
  具体参考我的github项目,这里只是解释下相关问题

###pom中引入aop依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

  切面类在MyAspect里,这边解释下在类中的5个注解,分别是@Before、@After、@AfterReturning、@Around和@AfterThrowing
假设对一个方法进行了弄了切面之后,执行的顺序分别是Before、After、AfterReturning,如果在执行过程中有异常,则执行AfterThrowing
可以看成是以下的代码

try{
  try{
    doBefore();//对应@Before注解的方法切面逻辑
    method.invoke();
  }finally{
     doAfter();//对应@After注解的方法切面逻辑
   }
     doAfterReturning();//对应@AfterReturning注解的方法切面逻辑
   }catch(Exception e){
     doAfterThrowing();//对应@AfterThrowing注解的方法切面逻辑
}
@Around指的是环绕增强,正常能用@Before、@After实现的,就不会用到@Around 使用@Around可以实现拦截不执行、修改参数等操作 JoinPoint对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的JoinPoint对象。 这边提供几个常用方法:
System.out.println("目标方法名为:" + joinPoint.getSignature().getName());
System.out.println("目标方法所属类的简单类名:" + joinPoint.getSignature().getDeclaringType().getSimpleName());
System.out.println("目标方法所属类的类名:" + joinPoint.getSignature().getDeclaringTypeName());
System.out.println("目标方法声明类型:" + Modifier.toString(joinPoint.getSignature().getModifiers()));
//获取传入目标方法的参数
Object[] args = joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
   System.out.println("第" + (i + 1) + "个参数为:" + args[i]);
}

@AfterReturning注解中有个特有的属性returning,可以取得目标方法的返回值
@AfterReturning(returning = “rvt”)

ProceedingJoinPoint是JoinPoint的一个子接口,@Around特有的参数
其中主要方法为proceedingJoinPoint.proceed(),表示执行目标方法,可以带参来实现修改参数

坚持原创技术分享,您的支持将鼓励我继续创作!