zoukankan      html  css  js  c++  java
  • Annotation原理

    为什么使用注解:

      1、通过注解,可保存源数据在Java源代码中;并且注解不同于注释,注解享有编译期的类型检查保护。

      2、可在描述符性质的类或接口中抽取重复性的工作,通过注解来简化与自动化这些工作。

    注解本身:

      1、三个点:

       1) 注解的@Target和@Retention

       2) 注解的属性

       3) 注解处理器

    四个元注解:

    @Target 表示注解可以用于什么地方。(ElementType.FIELD 字段,包括enum实例

    /LOCAL_VARIABLE

    /CONSTRUCTOR

    /METHOD

    /TYPE

    /PACKAGE

    /PARAMETER

    @Retention 表示需要在什么级别保存该注解信息。(RetentionPolicy.RUNTIME VM在运行期也保留注解

    /SOURCE 注解将被编译器丢弃

    /CLASS 注解在class文件中可用,但会被VM丢弃

    @Documented 将此注解包含在Javadoc中

    @Inherited 允许子类继承父类上的注解

    注解处理器:

      如果没有用来读取注解的工具,那注解也不会比注释更有用。   ——《Thinking in java》

      原理:

        通过反射得到某一个类上的注解、或者是某一个方法、某一个字段上的注解,然后取到注解的属性值,去完成相应需要的业务工作。

    自定义一个简单注解,通过反射来处理。

    //定义一个注解

    @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME)
    public @interface Display { String value() default "no values"; }
    public class Hello {
       //将自定义注解贴在一个方法上
        @Display("hello")
        public void sayHello(){
    
        }
    }
    // 注解处理器
    public
    class DisplayTracker {    //通过反射得到该方法上的Display注解。 public static void trackDisplays(Class<?> cl){ for(Method m :cl.getDeclaredMethods()){ Display display = m.getAnnotation(Display.class); if(display!=null){ System.out.println(display.value()); } } }
    public static void main(String[] args) { trackDisplays(Hello.class); }
    }

       输出:

      

  • 相关阅读:
    idea git使用记录
    会计科目中的借贷理解
    git使用合集
    Unsupported major.minor version 52.0
    sts问题合集
    idea导入工程
    (转)解决mybatis的mapper.xml查询不出数据,结果一直为null问题
    战争热诚的python全栈开发之路
    Python机器学习笔记:SVM(4)——sklearn实现
    Python机器学习笔记:SVM(3)——证明SVM
  • 原文地址:https://www.cnblogs.com/oliverBolg/p/10070619.html
Copyright © 2011-2022 走看看