java自定义注解

  • Java注解

    Java注解(Annotation)是JDK5.0引入的一种注释直接,可以作用于java语言中的类,方法,变量,参数和包中。java注解可以通过反射获取注解内容, 在编译器生成类文件时,注解可以被嵌入到字节码中。Java 虚拟机可以保留注解内容,在运行时可以获取到注解内容 。 java也支持自定义注解。

  • 内置注解

    java有自己的一套注解,分别如下:

    • 源注解

      @Documented:标记这些注解是否在用户文档中
      @Inherited:标记注解继承哪个注解
      @Retention:标识这个注解的作用,是作用于代码中,编译期,还是运行期
      @Target:用来标识这个注解是作用于方法上还是类上还是其他字段上

    • java提供的注解

      @Override:检查该方法是否是重载方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
      @Deprecated:标记过时方法。如果使用该方法,会报编译警告。
      @SuppressWarnings:指示编译器去忽略注解中声明的警告。

  • 自定义注解

    自定义一个java注解,用来注解到方法上面

    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation {
    
        String[] value() default "张三";
    
    }
    
    public class Person {
    
    
        @MyAnnotation(value = "lisi")
        public void boy(String name){
            System.out.println("boy name is "+ name);
        }
        
        @MyAnnotation(value = "zhangsan")
        public void girl(String name){
        
            System.out.println("girl name is " +name);
        }
    
    }
    

    通过反射来获取注解

    public class PersonAnnonationTest {
    
        public static void main(String[] args) throws Exception{
            Class<?> personClass = ClassLoader.getSystemClassLoader().loadClass("com.rookie.bigdata.annotation.Person");
        
            Person personInstance = (Person)personClass.newInstance();
            Method method = personClass.getMethod("boy", new Class[]{String.class});
        
            method.invoke(personInstance,new Object[]{"张三"});
        
            //获取注解上面的值
            if(method.isAnnotationPresent(MyAnnotation.class)){
                //获取上面的注解
                MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
        
                //获取注解的值
                String[] value = annotation.value();
                for (String s : value) {
                    System.out.println(s);
                }
            }
    
    
    
    
        }
    
    }
    

posted on 2020-01-19 11:03  海之浪子  阅读(120)  评论(0编辑  收藏  举报

导航