Java如何获取属性的注释信息详解

 更新时间:2021年07月14日 14:16:39   作者:闹了个笑话吧  
Java注解是从Java5开始添加到Java的,这篇文章主要给大家介绍了关于Java如何获取属性的注释信息的相关资料,文中介绍的非常详细,需要的朋友可以参考下

前言

注解是JavaSE5.0开始提供的一项新特性,利用此特性可以通过特定的注解标签为程序提供一些描述性信息。这些描述性信息可以在编译或运行时为编译器、运行环境提供附加的信息,从而简化开发。本文将详细介绍Java获取属性注释信息的相关内容,下面来一起看看详细的实现代码

实例代码

1.数据模型

package com.example.demo;

import java.util.List;

/**
 * Description:
 *
 * @author jack
 * @date 2021/7/13 5:15 下午
 */
public class DocVO {

    private List<FieldVO> fieldVOList;

    public DocVO(List<FieldVO> fieldVOList) {
        this.fieldVOList = fieldVOList;
    }

    public static class FieldVO {
        /**
         * 属性名称
         */
        private String fieldName;

        /**
         * 属性类型
         */
        private String fieldType;

        /**
         * 属性注释
         */
        private String describe;

        public FieldVO() {
        }

        public FieldVO(String fieldName, String fieldType, String describe) {
            this.fieldName = fieldName;
            this.fieldType = fieldType;
            this.describe = describe;
        }

        public String getFieldName() {
            return fieldName;
        }

        public void setFieldName(String fieldName) {
            this.fieldName = fieldName;
        }

        public String getFieldType() {
            return fieldType;
        }

        public void setFieldType(String fieldType) {
            this.fieldType = fieldType;
        }

        public String getDescribe() {
            return describe;
        }

        public void setDescribe(String describe) {
            this.describe = describe;
        }

        @Override
        public String toString() {
            return "FieldVO{" +
                    "fieldName='" + fieldName + '\'' +
                    ", fieldType='" + fieldType + '\'' +
                    ", describe='" + describe + '\'' +
                    '}';
        }
    }

    public List<FieldVO> getFieldVOList() {
        return fieldVOList;
    }

    public void setFieldVOList(List<FieldVO> fieldVOList) {
        this.fieldVOList = fieldVOList;
    }
}

2.工具类

package com.example.demo;

import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.FieldDoc;
import com.sun.javadoc.RootDoc;
import com.sun.tools.javadoc.Main;

import java.util.ArrayList;
import java.util.List;

/**
 * Description:
 *
 * @author jack
 * @date 2021/7/13 5:10 下午
 */
public class DocUtil {

    /**
     * 会自动注入
     */
    private static RootDoc rootDoc;

    /**
     * 会自动调用这个方法
     *
     * @param root root
     * @return true
     */
    public static boolean start(RootDoc root) {
        rootDoc = root;
        return true;
    }

    /**
     * 生成文档
     *
     * @param beanFilePath 注意这里是.java文件绝对路径
     * @return 文档注释
     */
    public static DocVO execute(String beanFilePath) {
        Main.execute(new String[]{"-doclet", DocUtil.class.getName(), "-docletpath",
                DocUtil.class.getResource("/").getPath(), "-encoding", "utf-8", beanFilePath});

        ClassDoc[] classes = rootDoc.classes();

        if (classes == null || classes.length == 0) {
            return null;
        }
        ClassDoc classDoc = classes[0];
        // 获取属性名称和注释
        FieldDoc[] fields = classDoc.fields(false);

        List<DocVO.FieldVO> fieldVOList = new ArrayList<>(fields.length);

        for (FieldDoc field : fields) {
            fieldVOList.add(new DocVO.FieldVO(field.name(), field.type().typeName(), field.commentText()));
        }
        return new DocVO(fieldVOList);
    }

}

3.测试

package com.example.demo;

import java.util.Objects;

/**
 * Description:
 *
 * @author jack
 * @date 2021/7/13 4:11 下午
 */
public class ClassTest {
    public static void main(String[] args) {
        String beanFilePath = "/Documents/demo/src/main/java/com/example/demo/dto/MailDTO.java";
        DocVO docVO = DocUtil.execute(beanFilePath);
        if (Objects.nonNull(docVO) && Objects.nonNull(docVO.getFieldVOList())){
            docVO.getFieldVOList().forEach(System.out::println);
        }
    }
}

总结

到此这篇关于Java如何获取属性的注释信息的文章就介绍到这了,更多相关Java获取属性注释信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • spring retry实现方法请求重试的使用步骤

    spring retry实现方法请求重试的使用步骤

    这篇文章主要介绍了spring retry实现方法请求重试及使用步骤,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • java高级用法之注解和反射讲义

    java高级用法之注解和反射讲义

    这篇文章主要给大家介绍了关于java高级用法之注解和反射讲义的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • SpringBoot使用CXF集成WebService的方法

    SpringBoot使用CXF集成WebService的方法

    这篇文章主要介绍了SpringBoot使用CXF集成WebService的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Java Mybatis数据源之工厂模式

    Java Mybatis数据源之工厂模式

    这篇文章主要介绍了Java Mybatis数据源之工厂模式,工厂模式是比较简单的设计模式,Mybatis的数据源的部分使用了工厂模式,文章详细介绍内容需要的朋友可以参考一下
    2022-06-06
  • Java中的Spring循环依赖详情

    Java中的Spring循环依赖详情

    这篇文章主要介绍了Java中的Spring循环依赖详情,文章基于Java的相关资料展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • Java实现简易学生管理系统

    Java实现简易学生管理系统

    这篇文章主要为大家详细介绍了Java实现简易学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Spring @Transactional注解的声明式事务简化业务逻辑中的事务管理

    Spring @Transactional注解的声明式事务简化业务逻辑中的事务管理

    这篇文章主要为大家介绍了Spring @Transactional注解的声明式事务简化业务逻辑中的事务管理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Java获取泛型实际类型的方法详解

    Java获取泛型实际类型的方法详解

    这篇文章主要介绍了Java获取泛型实际类型的方法详解,泛型,即“参数化类型”,一提到参数,最熟悉的就是定义方法时有形参列表,普通方法的形参列表中,每个形参的数据类型是确定的,而变量是一个参数,需要的朋友可以参考下
    2023-11-11
  • jpa使用manyToOne(opntional=true)踩过的坑及解决

    jpa使用manyToOne(opntional=true)踩过的坑及解决

    这篇文章主要介绍了jpa使用manyToOne(opntional=true)踩过的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • JAVA使用geotools读取shape格式文件的方法

    JAVA使用geotools读取shape格式文件的方法

    这篇文章主要介绍了JAVA使用geotools读取shape格式文件的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2017-01-01

最新评论