• 自定义注解-并判断方法或字段是否设置了注解


     1 在定义注解时我们会用到该注解:
        @Retention(RetentionPolicy.RUNTIME)它有以下三个选项来说明它的生存周期。
    2 /** 3 SOURCE级别表示代码级别可见,经过编译器编译生成字节码对象时,此注解就没了。 4 * 比如@override就是代码级别可见 5 */ 6 SOURCE, 7 8 /* 9 * CLASS表示字节码对象级别可见,但是字节码对象被虚拟机加载时, 10 * 这个注解会被抛弃,这是默认的可见级别 11 */ 12 CLASS, 13 14 /** 15 16 * RUNTIME表示运行时也可见,当虚拟机加载字节码对象时,此注解仍然可见。 17 * 因此可以通过反射获取注解信息,然后完成相应的注解解析工作,一般自定义的注解都是运行时可见。 18 */ 19 RUNTIME 20 21 /*现在我们定义一个注解*/ 22 23 import java.lang.annotation.ElementType; 24 import java.lang.annotation.Retention; 25 import java.lang.annotation.RetentionPolicy; 26 import java.lang.annotation.Target; 27 /*用来设置注解可以加到哪里*/ 28 @Target(ElementType.METHOD) 29 /*用来确定注解的生命周期*/ 30 @Retention(RetentionPolicy.RUNTIME) 31 public @interface TestAnnotationString { 32 String name() ; 33 String email() default "tjs"; 34 }

    接下来我们创建使用该注解的类

    1 public class TestAnnotation {
    2 
    3     @TestAnnotationString(name="tjs")
    4     public void out(){
    5         System.out.println("tjs");
    6     }
    7 }

    接下来我们来获取某个类的方法或字段有几个设置该注解

    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    public class TestAnnotationMain {
       public static void main(String[] args){
    
                TestAnnotationMain util=new TestAnnotationMain();
                util.getInfomation(TestAnnotation.class);
            }
    
            /*
             *这个方法用于注解的解析,其输入是Class类型的对象。通过反射这个Class对象获取相关的注解,进行注解的解析
             */
            public void getInfomation(Class<?>clazz){
    
                //因为注解是在成员方法上,因此需要获得类的所有方法信息
                Method[] Methods = clazz.getMethods();
    
                //如果注解是在成员字段上,因此需要获得类的所有字段信息
                Field[] filed22 = clazz.getFields();
    
                for (Method field : Methods) {
                    //判断这个字段上是否有相应的注解信息(FruitName.class)
                    if (field.isAnnotationPresent(TestAnnotationString.class)) {
    
                        TestAnnotationString tjs = field.getAnnotation(TestAnnotationString.class);
                        System.out.println("注释"+field.getName()+"   " +tjs.name());
                    }
    
                }
    
    
    
            }
    
    
    }

     通过自定义注解还可以配合SpringMVC来判断加某个注解的方法访问不需要登录,以及日志的的记录。

    本文参考自:https://blog.csdn.net/andyzhu_2005/article/details/81355399 

  • 相关阅读:
    基于ASP.NET的comet简单实现
    常用的富文本框插件FreeTextBox、CuteEditor、CKEditor、FCKEditor、TinyMCE、KindEditor ;和CKEditor实例
    关于Application.Lock和Lock(obj)
    asp.net 母版页使用详解--转
    ASP.NET 全局变量和页面间传值方法
    黑帽大会2014:10个酷炫的黑客工具
    python之高性能网络编程并发框架eventlet实例
    eCos中的线程与同步
    Ubuntu12.04 下修改Apache端口号
    PHP 之mysql空字符串问题
  • 原文地址:https://www.cnblogs.com/Tian-J-Shuai/p/12809486.html
Copyright © 2020-2023  润新知