spring aop操作日志,你学会了吗?(答:这次真会了)

414 阅读1分钟

在之前的一篇文章(juejin.cn/post/691900…)我写了基于注解的aop实现,但是颗粒度不是很强,本文将基于之前的文章对其中注解使用的做一个延申。

场景:对Controller做一个标识。

为什么要对Controller做一个标识(即描述这个Controller是做什么的,有什么用)?

答:在做日志记录的时候,我们有时候要获取的不仅仅是以下内容:

我们还需要对我们此次Controller的用途做一个说明,一个描述等。

然后我们的自定义注解就可以增加属性:

增强时获取:

1.  拿到目标对象

Object target = joinPoint.getTarget();

2.获取方法标识对象

CodeSignature signature = (MethodSignature) joinPoint.getSignature();

3.通过反射获取到方法对象

Method method = target.getClass().getMethod(signature.getName(), signature.getParameterTypes());

4.通过Method中(其实是调用Executable的getAnnotation(Class annotationClass))

StzbLog annotation = method.getAnnotation(StzbLog.class);

于是,这样我们就用自定义注解标识了方法来提升增强的饱满度。