Spring AOP切面编程总结
SpringBoot的AOP切面编程通俗易懂:https://blog.csdn.net/qq_38962004/article/details/89291288
SpringAOP获取目标方法注解类:
private <T extends Annotation> T getMethodAnnotation(ProceedingJoinPoint joinPoint, Class<T> clazz) {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
Method method = methodSignature.getMethod();
return method.getAnnotation(clazz);
}
项目案例一:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package org.jeecg.common.aspect; 2 3 import lombok.extern.slf4j.Slf4j; 4 import org.aspectj.lang.ProceedingJoinPoint; 5 import org.aspectj.lang.annotation.*; 6 import org.aspectj.lang.reflect.MethodSignature; 7 import org.springframework.stereotype.Component; 8 9 import java.lang.annotation.Annotation; 10 import java.lang.reflect.Method; 11 import java.util.List; 12 import java.util.Map; 13 import com.baomidou.dynamic.datasource.annotation.DS; 14 15 /** 16 * @Description: 对注解DS的值为multi-datasource1(taos数据源名称)的业务方法执行通用逻辑:taos版本从20升级到34, 17 * taos的binary字段对应的java类型从String变成byte[],对此变动进行通用处理; 18 * 19 * 而tm字段对应的java类型从Long变成java.sql.Timestamp, 由于业务代码中的时间转化情况比较多,无法在此统一处理 20 * 21 * @author: *** 22 * @date: *** 23 */ 24 @Aspect 25 @Component 26 @Slf4j 27 public class TaosIQryAspect { 28 29 private <T extends Annotation> T getMethodAnnotation(ProceedingJoinPoint joinPoint, Class<T> clazz) { 30 MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); 31 Method method = methodSignature.getMethod(); 32 return method.getAnnotation(clazz); 33 } 34 35 @Pointcut("@annotation(com.baomidou.dynamic.datasource.annotation.DS)") 36 public void taosPointcut() { 37 38 } 39 40 @Around("taosPointcut()") 41 public Object taosHandle(ProceedingJoinPoint point) throws Throwable { 42 43 Object result = point.proceed(); //执行目标方法 44 45 DS ds=getMethodAnnotation(point,DS.class); 46 47 log.info("数据源名称:{}",ds.value()); 48 if(ds.value().equals("multi-datasource1")) { 49 50 51 if (result != null) { 52 53 if (result instanceof List) { 54 List<Map<String, Object>> list = (List<Map<String, Object>>) result; 55 for (Map<String, Object> map : list) { 56 for (String key : map.keySet()) { 57 Object obj = map.get(key); 58 if (obj instanceof byte[]) { 59 obj = new String((byte[]) obj); 60 map.put(key, obj); 61 } 62 } 63 } 64 65 66 } else if (result instanceof Map) { 67 Map<String, Object> map = (Map<String, Object>) result; 68 for (String key : map.keySet()) { 69 Object obj = map.get(key); 70 if (obj instanceof byte[]) { 71 obj = new String((byte[]) obj); 72 map.put(key, obj); 73 } 74 } 75 76 } 77 78 } 79 80 } 81 82 83 84 return result; 85 } 86 87 }