zoukankan      html  css  js  c++  java
  • java 自定义注解

    1). @Retention

    表示需要在什么级别保存该注释信息,用于描述注解的生命周期,也是一个枚举RetentionPoicy来决定的,这个枚举我不列出来了,包括这个注解的具体怎么决定注解的生命周期我也不多讲,因为根据小弟这么多年使用的经验,都是填的RetentionPoicy.RUNTIME,填这个值注解处理器才能通过反色拿到注解信息,实现自己的语义,所以大家都填RetentionPoicy.RUNTIME就可以了,想扩展了解的自行google..

    2). @Documented

    如果用javadoc生成文档时,想把注解也生成文档,就带这个。(话说老铁们都是怎么写文档的,小弟表示从不写文档... ^_^)

    3). @Inherited

    @Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。注意,@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。

    其实这几个注解只有一个有点用,就是@Target,大家稍微注意下就行了。注解不是你想加哪就加哪的。


    public class Test {

    public static void main(String[] args) {
    TestVo testVo = new TestVo();
    testVo.setId(11);

    reflect(testVo,TestVo.class);

    }

    private static void reflect(TestVo testVo, Class<?> testVoClass) {
    Method[] declaredMethods =
    testVoClass.getDeclaredMethods();
    for (Method declaredMethod : declaredMethods) {
    TestAnnotation annotation = declaredMethod.getAnnotation(TestAnnotation.class);
    if (annotation != null) {
    System.out.println("Found Use Case:" + annotation.value() + " "
    + annotation.description());
    }

    }


    }
    }


    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface TestAnnotation {
    public String value() default "1";
    public String description() default "no description";
    }

    public class TestVo {
    private String masg;
    private Integer id;

    @TestAnnotation(description = "aaaaaaa")
    public Integer getId() {
    return id;
    }
    }
  • 相关阅读:
    Consul运行
    springcloud+Zookeeper测试
    解决:sql2005 安装完后 没有服务的问题
    asp.net dataTable添加列
    C#关闭word进程
    无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”
    C#网页采集
    C#计算时间差值
    C#播放声音
    C#打开得到路径
  • 原文地址:https://www.cnblogs.com/java-xz/p/10530301.html
Copyright © 2011-2022 走看看