谈谈你对java注解的理解

1,我认为注解就是代码中的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相对应的处理。
2,具体使用场景有spring中会用到很多,比如@controller,@param,@select等等,另外jdk原生的注解有@overried重写,@overload重载,@deprecated,@FunctionalInterface等,还有比如lombok的@Data注解;java原生的注解大多数用于标记和检查
4,除了基本注解,还有一种注解叫做元注解,比如@Retention设置注解的生命周期和@Target表示可以修饰哪些地方,比如方法,成员变量,包等。元注解是用来修饰注解的,
5,自定义注解,首先需要考虑这个注解在什么阶段被解析,也就是设置retention注解,这个注解需要传入的是RententionPolicy枚举,这个枚举有三个常量,分别是SOURCE仅保留在源码级,CLASS仅保留在编译期,和RUNTIME保留至运行期,jvm可见
6,如果你想要在编译期间处理注解相关的逻辑,你需要继承AbstractProcessor 并实现process方法。比如可以看到lombok就用AnnotationProcessor继承了AbstractProcessor。
7,一般来说,只要自定义的注解中**@Retention注解设置为SOURCE和CLASS这俩个级别,那么就需要继承并实现(因为SOURCE和CLASS这俩个级别等加载到jvm的时候,注解就被抹除了),从这里又引申出:lombok的实现原理就是在这(为什么使用了个@Data**这样的注解就能有set/get等方法了,就是在这里加上去的)
8,一般来说,我们自己定义的注解都是RUNTIME级别的,因为大多数情况我们是根据运行时环境去做一些处理。我们现实在开发的过程中写自定义注解需要配合反射来使用(因为反射是Java获取运行时的信息的重要手段)。
9,自定义注解的应用,在Spring AOP的逻辑处理中,判断是否带有自定义注解,如果有则将监控的逻辑写在方法的前后。这样,只要在方法上加上我的注解,那就可以有对方法监控的效果;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值