注解的简单使用以及自定义注解的过程

一、注解
(一)简介
1.什么是注解?
注解Annotation:是和class和interface同一级别的一种代码说明(标记)。
2.注解的作用
1. 编译检查。@Override
2. 可以代替xml配置文件。代替web.xml
3. 辅助生成API文档。@Documented
(二)怎样定义注解
1.JDK里提供的注解
(1)Override:检查方法是否符合重写父类,或者实现抽象方法的语句
(2)Deprecated:标注方法是已经过时,不建议使用的。
(3)SuppressWarning:压制警告
2.注解的定义
(1)定义一个注解
public @interface MyAnno{}
(2)约束注解(元注解)
元注解:用来给注解进行注解的注解,是由JDK提供给我们使用的。有2个需要学习:
1. @Target:约束注解可以加在哪?
ElementType.TYPE:可以加到类上
ElementType.METHOD:可以加到方法上
ElementType.FIELD:可以加在字段上
2. @Rentention:注解可以活到什么时候
RetentionPolicy.SOURCE:活到源码阶段
RetentionPolicy.CLASS:活到字节码阶段
RetentionPolicy.RUNTIME:活到运行阶段—-在反射调用方法时可以判断方法是否有注解,来完成一些工作
(3)定义注解的属性
格式:修饰符 属性类型 属性名称() [default 默认值];
示例:public String value() default “default”;
属性可以使用的类型有:
1. 基本数据类型
2. String类型
3. Enum类型
4. Class类型
5. Annotation类型
6. 以上类型的数组形式
应用注解时的配置:
@MyTest(属性名=值,属性名=值,…);
(三)怎样解析注解
注解通常是和反射配合使用的。

        //获取类的字节码对象
        Class<MyAnnoTest> clazz = MyAnnoTest.class;
        //获取方法对象
        Method method = clazz.getMethod("method");
        //如果方法上有MyAnno注解,打印输出一句话
        boolean present = method.isAnnotationPresent(MyAnno.class);
        if(present){
               //可以获取方法上的注解对象,对象里有注解的属性值
               MyAnno myAnno = method.getAnnotation(MyAnno.class);
               int age = myAnno.age();
               if(age>=18){
                      System.out.println("方法上有MyAnno注解,并且注解的age参数值不小于18,所以执行方法");
                      //反射执行方法
                      method.invoke(clazz.newInstance());
               }else{
                      System.out.println("方法上有MyAnno注解,但是age属性值小于18, 不执行方法");
               }
        }else{
               System.out.println("方法上没有有MyAnno注解,不执行方法");
        }

猜你喜欢

转载自blog.csdn.net/qq_41960595/article/details/81066308