zoukankan      html  css  js  c++  java
  • java基础--注解

    package annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    /**
     *
       元注解: 元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。
       @Retention、@Documented、@Target、@Inherited、@Repeatable 
       
       1.@Retention
         RetentionPolicy.RUNTIME 注解会在class字节码文件中存在,在运行时可以通过反射获取到
         RetentionPolicy.CLASS 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
         RetentionPolicy.SOURCE 注解仅存在于源码中,在class字节码文件中不包含
       2.@Documented
                   顾名思义,这个元注解肯定是和文档有关。它的作用是能够将注解中的元素包含到 Javadoc 中去。
       3.@Target 
                  是目标的意思,@Target 指定了注解运用的地方。
                  @Target({ElementType.METHOD,ElementType.TYPE})
        ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
        ElementType.CONSTRUCTOR 可以给构造方法进行注解
        ElementType.FIELD 可以给属性进行注解
        ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
        ElementType.METHOD 可以给方法进行注解
        ElementType.PACKAGE 可以给一个包进行注解
        ElementType.PARAMETER 可以给一个方法内的参数进行注解
        ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
       4.@Inherited 
               是继承的意思,但是它并不是说注解本身可以继承,而是说如果一个超类被 @Inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。
               说的比较抽象 
        @Inherited
        @Retention(RetentionPolicy.RUNTIME)
        @interface Test {}
        @Test
        public class A {}
        public class B extends A {}
        注解 Test 被 @Inherited 修饰,之后类 A 被 Test 注解,类 B 继承 A,类 B 也拥有 Test 这个注解。 
       5.@Repeatable
        Repeatable 自然是可重复的意思。@Repeatable 是 Java 1.8 才加进来的,所以算是一个新的特性。 
        @Person(role="artist")
        @Person(role="coder")
        @Person(role="PM")
        public class SuperMan{}    
        
        没有属性时  括号可省略
        @Auth
     * 
     *
     */
    public @interface Auth {
        
        /**
         * 注解只有成员变量,没有方法。注解的成员变量在注解的定义中以“无形参的方法”形式来声明
         * 在注解中定义属性时它的类型必须是 8 种基本数据类型外加 类、接口、注解及它们的数组。 
         * @return
         */
        String value() default "";
        
        String [] name();
        
        String group() default "group1";
        
        
    
    }
    
    
    /**
     * 
     * 注解的获取
     * 
     * 1类注解
     * TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class);
     * 2成员变量注解获取
     * Field a = Test.class.getDeclaredField("a");
       a.setAccessible(true);
       //获取一个成员变量上的注解
       Check check = a.getAnnotation(Check.class);
       
       3.方法上的注解获取
       Method testMethod = Test.class.getDeclaredMethod("testMethod");
       Annotation[] ans = testMethod.getAnnotations();
        for( int i = 0;i < ans.length;i++) {
            System.out.println("method testMethod annotation:"+ans[i].annotationType().getSimpleName());
        }
       
     * 
     * 
     * 
     */
  • 相关阅读:
    利用带关联子查询Update语句更新数据
    Marriage for Love
    Process Multiple Items respectively by commas!
    How to refresh current Form when thorugh X++ code influence
    Java SPI 机制分析
    浅谈微服务落地实践
    分布式事务之最大努力通知
    分布式事务之三阶段提交
    分布式事务之事务概念剖析
    SQL之树形查询结构设计
  • 原文地址:https://www.cnblogs.com/jentary/p/11103522.html
Copyright © 2011-2022 走看看