Java 注解的原理是什么?@Retention 有哪几种?
先自己想一想,再看参考要点
参考要点
- 注解是附加在代码中的元信息,本身不改变代码的逻辑,要由编译器、注解处理器或框架读取之后才起作用
- @Retention 为 SOURCE 时只在源码中,编译后丢弃,例如 @Override 只给编译器检查,Lombok 的注解在编译时由注解处理器读取并生成代码
- CLASS 保留在 class 文件中,但运行时读取不到,是默认值
- RUNTIME 在运行时可以通过反射读取,例如 Spring 的 @Autowired、@Transactional
- 注解是一种特殊的接口,getAnnotation() 返回 JDK 在运行时生成的动态代理对象,调用 value() 时从注解的属性表中取值,框架就是这样在调用方法前读出注解,再执行限流、开启事务等逻辑