# spring-aop **Repository Path**: woldier/spring-aop ## Basic Information - **Project Name**: spring-aop - **Description**: springboot简单的aop代码,以及解决嵌套调用切片无法正常工作的方案 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-09-17 - **Last Updated**: 2022-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 这是一个基于注解的aop 实现 ## 1. 目前实现了简单的注解切片 在task_01中我们不仅实现了简单的切片 ,然后还对嵌套调用进行了一个探究. 即在切片1中调用切片2,此时切片二是否会被拦截,并且对此进行了一个解决 ```java TaskImpl getThis(){ return (TaskImpl) AopContext.currentProxy(); } ``` 通过此函数 则可以完成切片传递 ## 2.我们想通过在切片中找到对应的参数并且进行操作并且把操作后的结果返回给函数进行调用 详见demo02 我们定义了一个注解,然后并为带有该注解的函数做了一个注解增强 ```java public class AdviceDemo02 { @Around("@annotation(com.woldier.aop.demo02.Task02Anno)") public Object around1(ProceedingJoinPoint joinPoint) throws Throwable { log.info("around1"); Object proceed = joinPoint.proceed(); //得到调用后的返回,如果我们不将器返回出去,那么被代理的对象不会得到返回值 log.info("around after"); return proceed; } @Around("@annotation(com.woldier.aop.demo02.Task02Anno)") public Object around2(ProceedingJoinPoint joinPoint) throws Throwable { Signature signature = joinPoint.getSignature(); // 得到签名 我们可以通过签名来判断是哪一类函数,对不同函数加以不同的处理 Object[] args = joinPoint.getArgs(); for (int i = 0; i < args.length; i++) { //遍历参数 args[i] = "aspect"; } Object proceed = joinPoint.proceed(args); //得到调用后的返回,如果我们不将器返回出去,那么被代理的对象不会得到返回值 return proceed; } } ``` ## 3. 设想把一些通用的aop抽取出来形成一个starter以便于使用 制作starter参考 `https://developer.aliyun.com/article/893073` `https://blog.csdn.net/sinat_36759535/article/details/112390973`