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

JAVA自定義注解詳情

 更新時間:2021年10月13日 10:54:41   作者:java-zh  
這篇文章主要介紹了Java自定義注解,結(jié)合實例形式總結(jié)分析了java常見的自定義注解類型、功能、用法及操作注意事項,需要的朋友可以參考下

原理:

注解的本質(zhì)是繼承Annotation的特殊接口,其具體實現(xiàn)類是Java運行時生成的動態(tài)代理類.而我們通過反射獲取注解時,返回的是Java運行時生成的動態(tài)代理對象Proxy1,通過動態(tài)代理對象,調(diào)用自定義注解(接口)的方法,最終會調(diào)用AnnotationInvocationHandler 的invoke方法.

元注解:

  • @Documented:是否將注解包含到JavaDoc中
  • @Retention:什么時候使用該注解,表明注解的生命周期
  • @Target:注解用于什么地方
  • @Inherited:是否允許子類繼承改注解

@Retention參數(shù)講解:

RetentionPolicy.SOURCE:在編譯階段丟棄,這些注解在編譯結(jié)束后就不會再有意義,所以它不會寫入字節(jié)碼.比如@Override, @SuppressWarnings都屬于這類注解。

RetentionPolicy.CLASS:在類加載的時候丟棄, 包含在類文件中

RetentionPolicy.RUNTIME:包含在類文件中,在運行時可以被獲取到

@Target:參數(shù)講解:

ElementType.TYPE:用于類,接口,枚舉

ElementType.FIELD:應(yīng)用于屬性

ElementType.METHOD:應(yīng)用于方法

ElementType.PARAMETER:用于方法的形式參數(shù)

ElementType.CONSTRUCTOR:用于構(gòu)造函數(shù)

ElementType.LOCAL_VARIABLE:應(yīng)用于局部變量

ElementType.ANNOTATION_TYPE:應(yīng)用于注解類型

ElementType.PACKAGE:應(yīng)用于包

ElementType.TYPE_PARAMETER:應(yīng)用于類型變量(1.8新增)

ElementType.TYPE_USE:1.8版本新增,應(yīng)用于任何使用類型的語句中

案例:

給一個類的String屬性設(shè)置默認值

@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ObjectFlag {
    //默認值
    String value() default "默認值1";
}
public class ObjectTest {
    @ObjectFlag
    String name;
    @ObjectFlag
    Integer age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
public class ObjectRun {
  public static <T> T setValueField(T t) throws IllegalAccessException {
        Class<?> cls = t.getClass();
        Field[] fields = cls.getDeclaredFields();
        for (Field field : fields) {
            boolean hasConfigField = field.isAnnotationPresent(ObjectFlag.class);
            field.setAccessible(true);//設(shè)置可以訪問私有變量
            //若屬性上有注解,使用注解的值作為key去配置文件中查找
            if (hasConfigField) {
                //獲取注解的默認值
                Object annoValue = field.getAnnotation(ObjectFlag.class).value();
                System.out.println("當(dāng)前的屬性名稱為:" + field.getName());
                System.out.println("當(dāng)前屬性類型:" + field.getGenericType().toString());
                //獲取到屬性的數(shù)據(jù)類型
                String type = field.getGenericType().toString();
                if (type.endsWith("String")) {//如果是字符串類型
                    field.set(t, annoValue.toString());
                }
            } else {  //若屬性上沒有注解,則使用屬性名作為key去配置文件中查找
                System.out.println("屬性" + field.getGenericType().toString() + "沒有該注解");
            }
        }
        return t;
    }
}

運行結(jié)果:

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之際的更多內(nèi)容!

相關(guān)文章

  • SpringBoot中實現(xiàn)Redis?Stream隊列的代碼實例

    SpringBoot中實現(xiàn)Redis?Stream隊列的代碼實例

    本文介紹了如何在Spring?Boot中使用Redis?Stream隊列進行消息的生產(chǎn)和消費,涉及到的主要內(nèi)容包括添加Redis依賴、配置RedisTemplate、創(chuàng)建生產(chǎn)者和消費者監(jiān)聽器等,需要的朋友可以參考下
    2024-09-09
  • SpringBoot中MybatisX插件的簡單使用教程(圖文)

    SpringBoot中MybatisX插件的簡單使用教程(圖文)

    MybatisX 是一款基于 IDEA 的快速開發(fā)插件,方便在使用mybatis以及mybatis-plus開始時簡化繁瑣的重復(fù)操作,本文主要介紹了SpringBoot中MybatisX插件的簡單使用教程,感興趣的可以了解一下
    2023-06-06
  • 解決@Scope(“prototype“)不生效的問題

    解決@Scope(“prototype“)不生效的問題

    這篇文章主要介紹了解決@Scope(“prototype“)不生效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java分布式緩存方案

    java分布式緩存方案

    本文簡單介紹了緩存的種類,緩存常見的問題,對大家的學(xué)習(xí)和工作有一定的參考價值,需要的小伙伴可以參考一下
    2021-08-08
  • 源碼閱讀之storm操作zookeeper-cluster.clj

    源碼閱讀之storm操作zookeeper-cluster.clj

    這篇文章主要介紹了源碼閱讀之storm操作zookeeper-cluster.clj的相關(guān)內(nèi)容,對其源碼進行了簡要分析,具有參考意義,需要的朋友可以了解下。
    2017-10-10
  • Spring session實現(xiàn)共享單點登錄案例過程解析

    Spring session實現(xiàn)共享單點登錄案例過程解析

    這篇文章主要介紹了Spring session實現(xiàn)共享單點登錄案例過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • String字符串拼接方法concat和+的效率對比

    String字符串拼接方法concat和+的效率對比

    這篇文章主要介紹了String字符串拼接方法concat和+的效率對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SSM+微信小程序?qū)崿F(xiàn)物業(yè)管理系統(tǒng)及實例代碼

    SSM+微信小程序?qū)崿F(xiàn)物業(yè)管理系統(tǒng)及實例代碼

    這篇文章主要介紹了SSM+微信小程序?qū)崿F(xiàn)物業(yè)管理系統(tǒng),ssm微信小程序物業(yè)管理系統(tǒng),有網(wǎng)站后臺管理系統(tǒng),本文通過實例代碼給大家展示系統(tǒng)的功能,需要的朋友可以參考下
    2022-02-02
  • idea運行java項目main方法報build failure錯誤的解決方法

    idea運行java項目main方法報build failure錯誤的解決方法

    當(dāng)在使用 IntelliJ IDEA 運行 Java 項目的 main 方法時遇到 "Build Failure" 錯誤,這通常意味著在項目的構(gòu)建過程中遇到了問題,以下是一些詳細的解決步驟,以及一個簡單的代碼示例,用于展示如何確保 Java 程序可以成功構(gòu)建和運行,需要的朋友可以參考下
    2024-09-09
  • Java中文件的讀寫方法之IO流詳解

    Java中文件的讀寫方法之IO流詳解

    這篇文章主要介紹了Java中文件的讀寫方法之IO流詳解,本文中的代碼所涉及到的路徑或者文件都是本人的,大家得換成自己的,并且大家可以在網(wǎng)上自行找一些材料作為讀入或者寫入的材料,不過路徑最好是英文的,不要包含中文,防止JVM讀取失敗
    2022-04-04

最新評論

香港 | 莱州市| 咸阳市| 舞钢市| 梁河县| 泽州县| 阿鲁科尔沁旗| 房产| 灵寿县| 青浦区| 怀远县| 柘荣县| 巴东县| 星子县| 龙游县| 江山市| 陵水| 离岛区| 常德市| 嘉峪关市| 若羌县| 荔波县| 威远县| 邵武市| 图片| 曲靖市| 永春县| 印江| 台安县| 聂拉木县| 桐梓县| 黑龙江省| 博客| 东山县| 金沙县| 铁岭县| 崇左市| 临猗县| 安陆市| 山丹县| 嫩江县|