toshine

导航

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);

}

 

项目案例一:

 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 }
View Code

 

posted on 2023-03-06 17:41  加瓦开阀攻城狮  阅读(53)  评论(0编辑  收藏  举报

……