• 笑明子 注解


    Annotation介绍:
    可以理解为:1:在代码中的特殊标记,这些标记不会影响程序的正常运行,但是可以在程序的编译、类加载、运行时读取。
    例如:当一个注解被定义为运行时可见时,当class被装载时注解才会被虚拟机读取。
    2:注解可以通过使用注解可以:在不改变原有程序的情况下对程序进行补充。
    3:Annotation可以使用在包、类、构造器、方法、成员变量、局部变量、参数的声明中。
    4:在程序中可以通过反射获取到特定成员的注解。然后根据情况给出处理代码。
    APT:
    (是一类型工具的统称)可以在程序的运行期间对Annotation访问、解析。重而使Annotation可以作用在程序的运行期间。
    java基本的Annotation:
    @Override 表示此成员是复写而来,如果不是复写来的就报红
    @Deprecated 不赞成使用的成员
    @SuppressWarnings 抑制编译警告
    自定义的Annotation:
    语法:(@interface)(实际就是继承了Annotation接口)
    public @interface MyAnnotation{} //定义无参数的注解
    public @interface MyAnnotation{ //定义有参数的注解
    String name();
    int age();
    }
    public @interface MyAnnotation{ //定义有默认参数的注解
    String name() default "xuming";
    int age() default 26;
    }
    使用语法:
    @MyAnnotation //使用无参注解
    public void Xxx(){}
    @MyAnnotation(name="xuming",age=27) //使用含参注解(如果有默认值,不指定时自动使用默认值)
    public void Xxx(){}
    根据是否有成员变量分类:
    1:标记Annotation
    没有成员变量,只通过是否有改注解来提供信息。(@Override)
    2:元数据Annotation
    提供参数就是提供元数据,所有叫做元数据Annotation
    Annotation获取:
    1:Annotation接口是所有注解的父接口
    2:java.lang.reflect包中定义了可以被注解修饰的成员:
    Class 类
    Constructor 构造器
    Field 类的成员变量
    Method 类方法
    Package 包
    3:AnnotatedElement接口
    程序元素的父接口:程序元素(类、构造方法、方法、成员变量等等等)
    只要获取到程序元素就可以使用AnnotatedElement接口中的三个方法:
    //返回程序元素上的指定类型的注解,如果没有返回null
    1:getAnnotation(Class<T> annotationClass)
    //返回该程序元素上的所有注解
    2:Annotation [] getAnnotations()
    //判断程序元素上是否有指定类型的注解,有返回true,没有返回false;
    3:boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
    使用Annotation:
    结合放射使用注解:
    反射 -> 程序元素 -> 注解 ->判断注解或者获取注解中的元数据(获取到注解后强制转换为特定类型)
    JDK的元Annotation:
    java提供了只可以修饰Annotation的的注解:
    1:Retention(翻译:保留)
    用于指定被修饰的Annotation保留多长时间。(编译时丢弃,运行之前丢弃,运行时可用(可以通过反射获取到))
    @Retention()可以接受三个参数分别是:
    1:@Retention(RetentionPolicy.SOURCE) //编译器直接丢弃
    2: @Retention(RetentionPolicy.CLASS) //保存在Class文件中,运行时丢弃 (默认值)
    3: @Retention(RetentionPolicy.RUNTIME) //保存在Class文件中,运行时可以使用反射获取到。
    使用:
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation{}
    2:@Target (翻译:目标)
    用于指定被修饰的Annotation可以使用在那种程序元素中,例如:某个注解只能用于构造方法。
    使用@Target时需要指顶目标类型(有如下类型):
    1:ElementType.ANNOTATION_TYPE //只能修饰Annotation
    2:ElementType.CONSTRUCTOR //只能修饰构造方法
    3: ElementType.FIELD //只能修饰成员变量
    4:ElementType.LOCAL_VARIABLE //只能修饰局部变量
    5:ElementType.METHOD //只能修饰方法
    6:ElementType.PACKAGE //只能修饰包
    7:ElementType.PARAMETER //只能修饰参数
    8: ElementType.TYPE //可以修饰类、接口(注解)、枚举
    使用:
    //MyAnnotation注解只能修饰方法
    @Target(ElementType.METHOD)
    public @interface MyAnnotation{}
    3:@Documented
    被@Document修饰的注解使用后会被javaDoc的提取
    4:@Inherited
    被@Inherited修饰的注解可以被继承。
    使用APT处理Annotation:
    什么是APT:
    APT是一种处理注解的工具,可以再源代码文件中找出Annotation,然后针对性的做出处理。
    例如:我们可以自定义一个APT,作用是对每一个java文件生成对应的xml文件。
  • 相关阅读:
    phpexcel 字符串转码
    thinkphp 3.2 linux二级目录安装
    linux 系统、命令、软件
    thinkphp3.2和phpexcel导入
    苹果手机微信分享代码失效
    thinkphp3.2与phpexcel带图片生成 完美案例
    thinkphp3.2与phpexcel基础生成
    thinkphp 3.2加载类
    thinkphp 3.2与phpexcel
    thinkphp 导出exl功能
  • 原文地址:https://www.cnblogs.com/Xmingzi/p/8309723.html
Copyright © 2020-2023  润新知