写在前面
这个点我们公司的人走的已经差不多了,原因很简单呀,明天元旦嘛,放假前可是不加班的,很nice,实习生的我,今天给大家分享一篇springboot自定义注解的技术文章。
很牛逼的注解
开发过程中,想必大家都用过或听过注解吧,加个注解万事大吉,但是为什么这么厉害呢,底层葫芦里到底装的什么药,今天我们就切开葫芦看看瓢。
离不开的Java新特性
用springboot注解的时候,感觉,哇spring好厉害,殊不知,点进去看源码,是JDK注解的功劳呀,首先看看,Component注解,上面三个都是JDK的注解,也就是元注解。@Indexed是啥呢,这个是索引的东西,暂不讨论。
令人好奇的东西
我最初的时候,就这样写一个注解,他就能生效了吗,哈哈哈,太天真了吧,其实还有一个牛逼的操作呢,该注解的作用,逻辑在哪写呢,这个时候AOP思想可以善良登场了,我们可以通过一个切面的思想来解决。(聊点题外话,切面怎么实现的呢,答案是动态代理,那动态代理是怎么实现的呢,是通过JDK或CGLIB实现的,那问题来了,JDK和CGLIB又是怎么实现的呢,恕我直言,我也不知道。)
强大的AOP
面试的时候,经常问到AOP的问题,但是水水的我总是说,AOP定义一个切面可以实现日志的功能,天天都是这样回答,我都有点不耐烦了,今天来点特殊的,还是日志,但是这次用注解实现。
既然用注解实现AOP,那首先需要定义一个注解吧,怎么定义呢,模仿别人。
注解定义好了,里面的参数简单说一下,这里着重讲解如何自定义注解。
lementType.METHOD
这个意思是用到方法上的注解
RetentionPolicy.RUNTIME
这个是运行时生效的
@Documented
这个就是生成javadoc的东西了
注解定义好了,那接下来干什么呢,当然是让该注解生效了,怎么生效呢,AOP可以出现了。
里面的注释这么多,我就不多bb了。
然后就可以测试了呀。是不是很简单,我也觉得,难的东西都是别人实现好的。。。有能力,可以研究一下@Aspect的底层实现,或者是等我发布文章,我们一起探讨,撤远了,测一下吧。
通过一个controller,只需要加一个@MyLog
即可。
可以清楚的看到,已经生效了,注解的神奇之处还有很多,这只是一个入门,今天的内容就到这里了,祝大家元旦快乐!我们下期再见~