在之前的一篇文章(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);
于是,这样我们就用自定义注解标识了方法来提升增强的饱满度。