最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何獲取屬性的注釋信息詳解

 更新時(shí)間:2021年07月14日 14:16:39   作者:鬧了個(gè)笑話吧  
Java注解是從Java5開(kāi)始添加到Java的,這篇文章主要給大家介紹了關(guān)于Java如何獲取屬性的注釋信息的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下

前言

注解是JavaSE5.0開(kāi)始提供的一項(xiàng)新特性,利用此特性可以通過(guò)特定的注解標(biāo)簽為程序提供一些描述性信息。這些描述性信息可以在編譯或運(yùn)行時(shí)為編譯器、運(yùn)行環(huán)境提供附加的信息,從而簡(jiǎn)化開(kāi)發(fā)。本文將詳細(xì)介紹Java獲取屬性注釋信息的相關(guān)內(nèi)容,下面來(lái)一起看看詳細(xì)的實(shí)現(xiàn)代碼

實(shí)例代碼

1.數(shù)據(jù)模型

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 {
        /**
         * 屬性名稱(chēng)
         */
        private String fieldName;

        /**
         * 屬性類(lèi)型
         */
        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.工具類(lèi)

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 {

    /**
     * 會(huì)自動(dòng)注入
     */
    private static RootDoc rootDoc;

    /**
     * 會(huì)自動(dòng)調(diào)用這個(gè)方法
     *
     * @param root root
     * @return true
     */
    public static boolean start(RootDoc root) {
        rootDoc = root;
        return true;
    }

    /**
     * 生成文檔
     *
     * @param beanFilePath 注意這里是.java文件絕對(duì)路徑
     * @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];
        // 獲取屬性名稱(chēng)和注釋
        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.測(cè)試

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);
        }
    }
}

總結(jié)

到此這篇關(guān)于Java如何獲取屬性的注釋信息的文章就介紹到這了,更多相關(guān)Java獲取屬性注釋信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中如何將list轉(zhuǎn)為樹(shù)形結(jié)構(gòu)

    Java中如何將list轉(zhuǎn)為樹(shù)形結(jié)構(gòu)

    這篇文章主要介紹了Java中如何將list轉(zhuǎn)為樹(shù)形結(jié)構(gòu),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Java實(shí)現(xiàn)獲取前、后N天日期的函數(shù)分享

    Java實(shí)現(xiàn)獲取前、后N天日期的函數(shù)分享

    本文給大家分享的是使用java實(shí)現(xiàn)的獲取當(dāng)前日期前后N天的函數(shù),非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-03-03
  • Java基于Semaphore構(gòu)建阻塞對(duì)象池

    Java基于Semaphore構(gòu)建阻塞對(duì)象池

    這篇文章主要介紹了Java基于Semaphore構(gòu)建阻塞對(duì)象池,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java實(shí)現(xiàn)同步枚舉類(lèi)數(shù)據(jù)到數(shù)據(jù)庫(kù)

    Java實(shí)現(xiàn)同步枚舉類(lèi)數(shù)據(jù)到數(shù)據(jù)庫(kù)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)同步枚舉類(lèi)數(shù)據(jù)到數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java?retainAll()方法的超詳細(xì)講解

    Java?retainAll()方法的超詳細(xì)講解

    這篇文章主要介紹了Java?retainAll()方法的相關(guān)資料,retainAll()是Java集合接口中的一個(gè)方法,用于保留集合中與指定集合交集的元素,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • java輸入輸出與方法詳細(xì)代碼示例

    java輸入輸出與方法詳細(xì)代碼示例

    本文詳細(xì)介紹了Java中的輸出方法如println、print和printf,以及輸入的Scanner類(lèi)使用方法,同時(shí),介紹了Random類(lèi)生成隨機(jī)數(shù)、方法定義、形參和實(shí)參關(guān)系、遞歸等概念和使用方式,為編程初學(xué)者提供了全面的Java編程基礎(chǔ)知識(shí),需要的朋友可以參考下
    2024-09-09
  • spring boot中各個(gè)版本的redis配置問(wèn)題詳析

    spring boot中各個(gè)版本的redis配置問(wèn)題詳析

    這篇文章主要給大家介紹了關(guān)于spring boot中各個(gè)版本的redis配置問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Java synchronized的鎖升級(jí)過(guò)程詳解

    Java synchronized的鎖升級(jí)過(guò)程詳解

    在 JDK 1.6之前,synchronized 是一個(gè)重量級(jí)、效率比較低下的鎖,但是在JDK 1.6后,JVM 為了提高鎖的獲取與釋放效,,對(duì) synchronized 進(jìn)行了優(yōu)化,所以本文給大家介紹了synchronized的鎖升級(jí)過(guò)程,需要的朋友可以參考下
    2024-04-04
  • mybatis-plus動(dòng)態(tài)表名的實(shí)現(xiàn)示例

    mybatis-plus動(dòng)態(tài)表名的實(shí)現(xiàn)示例

    這篇文章主要介紹了mybatis-plus動(dòng)態(tài)表名的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 使用spring動(dòng)態(tài)獲取接口的不同實(shí)現(xiàn)類(lèi)

    使用spring動(dòng)態(tài)獲取接口的不同實(shí)現(xiàn)類(lèi)

    這篇文章主要介紹了使用spring動(dòng)態(tài)獲取接口的不同實(shí)現(xiàn)類(lèi),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論

巴楚县| 辉县市| 定西市| 宜良县| 黄大仙区| 灵川县| 波密县| 定西市| 鹤山市| 西华县| 威海市| 胶南市| 沭阳县| 南宫市| 湟源县| 垫江县| 星子县| 平顺县| 高尔夫| 芜湖县| 长阳| 攀枝花市| 沐川县| 会昌县| 彰化市| 汝城县| 崇明县| 礼泉县| 响水县| 桐乡市| 绥棱县| 安龙县| 凯里市| 萨嘎县| 辽宁省| 平阳县| 乌拉特中旗| 梁山县| 青铜峡市| 平顶山市| 临夏县|