• attilax.java 注解的本质and 使用最佳实践(3)O7


    attilax.java 注解的本质and 使用最佳实践(3)O7

    1. 定义pojo 1

    2. 建立注解By eclipse tps 1

    3. 注解参数的可支持数据类型: 2

    4. 注解处理器 2

    5. 读取注解 2

    6. 不能读取到注解,null的解决 3

    7. 参考: 3

    1. 定义pojo

    public class pojo {

    @Validate("required")

    String name;

    int id;

    @Validate("required")

    String email;

    作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

    转载请注明来源: http://blog.csdn.net/attilax

    2. 建立注解By eclipse tps

    import java.lang.annotation.Inherited;

    import java.lang.annotation.Retention;

    import java.lang.annotation.RetentionPolicy;

    /**

     * from tapestry5

     * @author Administrator

     *

     */

    @Retention(RetentionPolicy.RUNTIME)

    @Inherited

    public @interface Validate {

    // java.lang.annotation.Retention

    String value();

    }

     

    3.  注解参数的可支持数据类型:

        1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
        2.String类型
        3.Class类型
        4.enum类型
        5.Annotation类型
        6.以上所有类型的数组

     

    4. 注解处理器

    就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理。

    多资料都提到 APT ,或者 AbstractProcessor 。但事实上,我的理解是 APT 或者 AbstractProcessor 更多的用于:在非运行时进行增强处理(如:分析逻辑 BUG ,分析代码结构等等)。

    5. 读取注解

    Field[] flds = pojo.class.getDeclaredFields();

    for (Field field : flds) {

    System.out.println(field.getName());

    Validate vld = field.getAnnotation(Validate.class);

      if (vld != null) {

      System.out.println(vld);

    System.out.println(vld.value());

     }

    }

    >>>>>>>

    name

    @com.attilax.anno.Validate(value=required)

    required

    id

    email

    @com.attilax.anno.Validate(value=required)

    required

    6. 不能读取到注解,null的解决

    添加@Retention(RetentionPolicy.RUNTIME)

    通知:eclipse4.3不能自动提示导入这个类.只好手动import

    import java.lang.annotation.Retention;

    import java.lang.annotation.RetentionPolicy;

     

    1.1、@Retention: 定义注解的保留策略

     @Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,

    @Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在,在运行时可以通过反射获取到

     

    7. 参考:

    paip.Java Annotation注解的作用and 使用 - attilax的专栏 - 博客频道 - CSDN.NET.htm

    paip.java 注解的详细使用代码 - attilax的专栏 博客频道 - CSDN.NET.htm

    java自定义注解 茄子_2008 - 博客园.htm (detail api)

    深入理解Java:注解(Annotation)自定义注解入门 - peida - 博客园.htm  (api)

  • 相关阅读:
    javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)
    javaScript的函数(Function)对象的声明(@包括函数声明和函数表达式)
    java后台调用HttpURLConnection类模拟浏览器请求(一般用于接口调用)
    java 常用concurrent类
    安装php5.5
    Unix 哲学
    mysql创建用户两次授权
    python知识点 07-11
    Gradle 1.3之前的Publishing artifacts
    mysql编码详解
  • 原文地址:https://www.cnblogs.com/attilax/p/5963941.html
Copyright © 2020-2023  润新知