Java注解三连问
2023-05-11 23:04 作者:架构风清扬-趣学旅程 | 我要投稿
注解的内容很多,本次的面试题讲解主要是针对以下几个问题:
1,注解是在编译期生效还是运行期生效?
2,有没有只在编译期生效的注解?
3,编译期生效的注解和运行期生效的注解有什么区别?
我们的分析如下:
首先,第一个问题是给面试者挖坑,两者都存在,关键看注解的定义描述;
其次,第二个问题是有,比如我们JDK默认提供注解@Oerride
我们观察其注解的定义如下
上面的两个注解说明做下解释:
@Target(ElementType.METHOD) :表示该注解可以放在方法的定义上
@Retention(RetentionPolicy.SOURCE) : 表示该注解在编译期有效
那什么是编译期有效?
就好比我们说的@Oerride,它的作用就是在编译期间,检查我们重写的代码有没有符合语法规则,如果不符合就会通过红线报错,编译失败,而真正到运行期间就没有作用了
最后,说第三个问题
就是运行期的注解有什么用,其实我们用过的很多框架,他们都会提供注解,这些都不是JDK提供的注解,我们统称为自定义注解
比如Springweb提供的
@RestController
我们观察其注解的定义说明如下:
我们可以看到其关键点的描述为:
@Retention(RetentionPolicy.RUNTIME) : 表示是运行期有效
为什么需要定义为运行期有效?
大家想想,我们创建Controller是不是在服务运行期间才正式对外提供服务的,而Spring容器需要去检查到底哪些Controller可以对外提供服务,那么以这个自定义注解为暗号,一看,咦,你小子有这个注解,行了,你就是可以对外提供服务的人,所以注解必须是在运行期间有效
希望对您有所帮助!