• Java中注解Annotation的定义、使用、解析


        此例子,用于说明如何在Java中对“注解 Annotation”的定义、使用和解析的操作。注解一般用于自定义开发框架中,至于为什么使用,此处不作过多说明,这里只说明如何使用,以作备记。下面例子已测试,可以正常运行通过。

    1、注解自定义。
    这里定义两个注解,分别用来注解类和注解属性。

    package cc.rulian.ann;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /** 
     * 类注释
     */
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface MyTable
    {
        public String name() default "";
        public String version() default "1";
    }

     

    package cc.rulian.ann;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    
    /** 
     * 字段注释
     */
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.FIELD)
    
    public @interface MyField {
        public String name() default "";     //名称
        public String type() default "";    //类型
        
    }

     

    2、注解的使用。
    说明如何在类中使用自定义注解。

    package cc.rulian.ann;
    
    import java.util.Date;
    
    /**
     * 基础日志
     * 
     */
    @MyTable(name="T_BaseLog",version="2")
    public class BaseLog{
        
        @MyField(name="addTime",type="Date")
        private Date log_time; // 时间
    
        @MyField(name="log_level",type="String")
        private String log_level; // 级别
    
        @MyField(name="message",type="String")
        private String message; // 日志内容
    
        public Date getLog_time()
        {
            return log_time;
        }
    
        public void setLog_time(Date log_time)
        {
            this.log_time = log_time;
        }
    
        public String getLog_level()
        {
            return log_level;
        }
    
        public void setLog_level(String log_level)
        {
            this.log_level = log_level;
        }
    
        public String getMessage()
        {
            return message;
        }
    
        public void setMessage(String message)
        {
            this.message = message;
        }
    
    }

     

    3、注解的解析。
    说明如何解析注解。

    package cc.rulian.ann;
    
    import java.lang.reflect.Field;
    
    /**
     * 读取注释
     */
    public class ReadAnn
    {
        public static void main(String[] args)
        {
            // 读取类的注释
            BaseLog obj = new BaseLog();
            // Annotation[] arr = obj.getClass().getAnnotations(); //得到所有注释
            MyTable table = obj.getClass().getAnnotation(MyTable.class); // 取得指定注释
    
            System.out.println("类注释(name): " + table.name());
            System.out.println("类注释(version): " + table.version());
    
            // 读取属性的注释
            Field[] fields = obj.getClass().getDeclaredFields();
            for (Field f : fields)
            {
                // Annotation[] arr2 = f.getAnnotations(); //得到所有注释
                MyField ff = f.getAnnotation(MyField.class);// 取得指定注释
                if(ff != null)
                {
                    System.out.println("属性(" + f.getName() + "): " + ff.name() + " -- " + ff.type());
                }
            }
        }
    
    }

     

    4、解析输出结果。

    类注释(name): T_BaseLog
    类注释(version): 2
    属性(log_time): addTime -- Date
    属性(log_level): log_level -- String
    属性(message): message -- String

     

  • 相关阅读:
    OC动态特性
    app之间的互相跳转
    将服务器返回的URL或者网址截取出来特定的字符,然后将字符返回,一般根据返回的字符判断用户是否登录等即时状态
    网络请求的封装
    代理传值
    sql脚本查询日期时间段日期
    SQL >日期函数
    Sql 中text类型字段判断是否为空
    修复IE9.0下PlaceHolder 属性问题js脚本
    迅雷专用下载的几种代码
  • 原文地址:https://www.cnblogs.com/rulian/p/5607649.html
Copyright © 2020-2023  润新知