跳至主要內容

注解

摸鱼散人小于 1 分钟

说一下你对注解的理解?

  • Java注解本质上是一个标记

  • 注解可以标记在类上、方法上、属性上等,标记自身也可以设置一些值

  • 有了标记之后,我们就可以在编译或者运行阶段去识别这些标记,然后搞一些事情,这就是注解的用处

    • AOP,使用注解作为切点就是运行期注解的应用
    • lombok,就是注解在编译期的运行
  • 注解生命周期

    • RetentionPolicy.SOURCE

      • 给编译器用的,不会写入 class 文件

        @Target(ElementType.METHOD)
        @Retention(RetentionPolicy.SOURCE)
        public @interface Override {
        }
        
    • RetentionPolicy.CLASS

      • 会写入 class 文件,在类加载阶段丢弃,也就是运行的时候就没这个信息了

        没找到
        
    • RetentionPolicy.RUNTIME

      • 会写入 class 文件,永久保存,可以通过反射获取注解信息

        @Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
        @Retention(RetentionPolicy.RUNTIME)
        @Documented
        public @interface Autowired {
        
        	/**
        	 * Declares whether the annotated dependency is required.
        	 * <p>Defaults to {@code true}.
        	 */
        	boolean required() default true;
        
        }