SpringAop之日志(读配置文件方式)

读配置文件的目的在于减少代码上的冗余,这个冗余通常指加注解之类的。

比方说,我们原来的代码是这样:

1
2
3
4
5
6
@GetMapping("/list")
@Log(title = "查询用户列表", businessType = BusinessType.QUERY)
public AjaxResult list() {

return AjaxResult.success(userService.queryUserListInfo());
}

相当于每个我都要加上@Log,我才能在aop中将其插入日志表(识别功能),现在我觉得这样太麻烦了。所以我可以这样做,也就是将@Log抽取一个配置文件,这个配置文件,团队定个规矩,上线前统一更改即可。

于是我的AOP代码就变成这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
@Aspect
@Component
public class LogAspect {


public static LogAspect logAspect;

@PostConstruct
public void init() {
logAspect = this;
}

@Pointcut("execution(public * com.eqics.blog.controller..*.*(..))")
public void Pointcut() {

System.out.println("切点");
}


//@Around:环绕通知
@Around("Pointcut()")
@Transactional(isolation = Isolation.DEFAULT)
public Object Around(ProceedingJoinPoint pjp) throws Throwable {
Map<String, Object> data = new HashMap<>();
//获取目标类名称
String clazzName = pjp.getTarget().getClass().getName();
//获取目标类方法名称
String methodName = pjp.getSignature().getName();

// 请求的地址
String ip = IpUtils.getIpAddr(ServletUtils.getRequest());

String apiUrl = ServletUtils.getRequest().getRequestURI();

//关键核心代码
InputStream path = getClass().getResourceAsStream("/api.properties");
BufferedReader reader = new BufferedReader(new InputStreamReader(path));
System.out.println("reader:" + reader);


Properties pro = new Properties();
pro.load(reader);

System.out.println("pro:" + pro.getProperty(apiUrl));

data.put("apiUrl", apiUrl);

//IP地址
data.put("ip", ip);

//记录类名称
data.put("clazzName", clazzName);
//记录对应方法名称
data.put("methodName", methodName);
//记录请求参数
data.put("params", pjp.getArgs());

//开始调用时间
// 计时并调用目标函数
long start = System.currentTimeMillis();
Object result = pjp.proceed();
Long time = System.currentTimeMillis() - start;

//记录返回参数
data.put("result", result);

//设置消耗总时间
data.put("consumeTime", time);

try {

System.out.println("日志输出:" + data);

} catch (Exception e) {

e.printStackTrace();
}

return result;

}


}

api.properties配置文件如下:

1
2
3
# 用户管理
/blog_user/list=get user manage
/blog_user/list_test=用户管理测试

文章目录