摘要:自定義注解上面是一個(gè)自定義的注解類,使用元注解來(lái)定義自定義注解,自定義注解的函數(shù)名就是參數(shù)名,函數(shù)返回類型是變量的類型。自定義注解來(lái)對(duì)字段進(jìn)行一定的約束如在通信的雙方。
在我們編程過(guò)程中,會(huì)經(jīng)常需要使用到注解,在使用spring進(jìn)行應(yīng)用構(gòu)建的過(guò)程中會(huì)使用到非常多的spring注解。這篇就來(lái)談一談我們是如何去定義自己的注解在程序中進(jìn)行使用的。
0x01 元注解jdk1.8給我們提供了如下注解:
1.@Target 2.@Retention 3.@Documented 4.@Inherited 5.@Native 6.@Repeatable
上面這些類型都在jdk提供的java.lang.annotation包下,下面介紹兩個(gè)常用的注解類:
一、Target:描述注解的作用范圍,表示這個(gè)注解能用在什么什么地方。取值(ElementType)有:
1.CONSTRUCTOR:用于描述構(gòu)造器 2.FIELD:用于描述域 3.LOCAL_VARIABLE:用于描述局部變量 4.METHOD:用于描述方法 5.PACKAGE:用于描述包 6.PARAMETER:用于描述參數(shù) 7.TYPE:用于描述類、接口(包括注解類型) 或enum聲明
上面的定義都在java.lang.annotation.ElementType類中。
二、Retention:描述注解的生命周期。取值有如下幾個(gè)(定義在java.lang.annotation.RetentionPolicy中):
1.SOURCE:源文件 2.CLASS:class文件 3.RUNTIME:運(yùn)行時(shí)
平時(shí)我們用的比較多的值是RUNTIME,注解在運(yùn)行時(shí)生效。
0x02 自定義注解@Documented @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.FIELD}) public @interface NotNull { public String value() default "1234"; }
上面是一個(gè)自定義的注解類,使用元注解來(lái)定義自定義注解,自定義注解的函數(shù)名就是參數(shù)名,函數(shù)返回類型是變量的類型。返回類型只能是基本類型、Class、Enum、String,可以通過(guò)default來(lái)聲明參數(shù)的默認(rèn)值。
下面來(lái)看下如何使用這個(gè)注解:
在類的定義中使用上面自定義的注解類:
public class TypeClass { @NotNull public int intType; public String s; @Override public String toString() { return "TypeClass{" + "intType=" + intType + ", s="" + s + """ + "}"; } }
使用上面定義的類:
TypeClass typeClass = new TypeClass(); Field[] fields = TypeClass.class.getDeclaredFields(); for (Field field : fields) { NotNull annotation = field.getAnnotation(NotNull.class); if(annotation != null) { System.out.println(field.getName() + " " +annotation); System.out.println("CFNotNull value: " + annotation.value()); } }
上面的示例中可以拿到TypeClass的所有字段,然后逐個(gè)去判斷字段的注解,根據(jù)自己定義的注解去做不同的邏輯操作。
0x03 使用場(chǎng)景1.開(kāi)篇就提到了spring中我們會(huì)用到很多注解。
2.自定義注解來(lái)對(duì)字段進(jìn)行一定的約束(如在通信的雙方)。
3.對(duì)注解修飾的對(duì)象進(jìn)行說(shuō)明限制(比如mvc應(yīng)用對(duì)權(quán)限進(jìn)行集中控制)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/65157.html
摘要:注解有以下幾個(gè)知識(shí)點(diǎn)元數(shù)據(jù)注解的分類內(nèi)置注解自定義注解注解處理器本文先介紹前面?zhèn)€知識(shí)點(diǎn)元數(shù)據(jù)注解的分類內(nèi)置注解自定義注解。注解相當(dāng)于是一種嵌入在程序中的元數(shù)據(jù),可以使用注解解析工具或編譯器對(duì)其進(jìn)行解析,也可以指定注解在編譯期或運(yùn)行期有效。 大家好,我是樂(lè)字節(jié)的小樂(lè),上次說(shuō)過(guò)了Java多態(tài)的6大特性|樂(lè)字節(jié),接下來(lái)我們來(lái)看看Java編程里的注解。showImg(https://segme...
摘要:項(xiàng)目介紹日志脫敏是常見(jiàn)的安全需求。常見(jiàn)的脫敏內(nèi)置方案。支持用戶自定義注解。自定義注解導(dǎo)入自定義注解新增功能。策略優(yōu)先級(jí)優(yōu)先生效,然后是系統(tǒng)內(nèi)置注解,最后是用戶自定義注解。讓這些的密碼不進(jìn)行脫敏定義測(cè)試對(duì)象定義一個(gè)使用自定義注解的對(duì)象。 項(xiàng)目介紹 日志脫敏是常見(jiàn)的安全需求。普通的基于工具類方法的方式,對(duì)代碼的入侵性太強(qiáng)。編寫起來(lái)又特別麻煩。 本項(xiàng)目提供基于注解的方式,并且內(nèi)置了常見(jiàn)的脫敏...
摘要:注解概念注解也被成為元數(shù)據(jù)為我們?cè)诖a中添加信息提供了一種形式化的方式,使我們可以在稍后的某個(gè)時(shí)刻更容易的使用這些數(shù)據(jù)。 注解 概念 注解(也被成為元數(shù)據(jù))為我們?cè)诖a中添加信息提供了一種形式化的方式,使我們可以在稍后的某個(gè)時(shí)刻更容易的使用這些數(shù)據(jù)。 注解是 Java 5 所引入的眾多語(yǔ)言變化之一: 注解使得我們可以以編譯器驗(yàn)證的格式存儲(chǔ)程序的額外信息 注解可以生成描述符文件,甚至是...
摘要:我們定義注解元素時(shí),經(jīng)常使用空字符串作為默認(rèn)值。也經(jīng)常使用負(fù)數(shù)比如表示不存在的含義示例既可以修飾方法,也可以修飾類運(yùn)行時(shí)使用關(guān)鍵字定義注解成員以無(wú)參無(wú)異常方式聲明。方法的名稱就是參數(shù)的名稱可以使用為成員指定一個(gè)默認(rèn)值浙江大學(xué)清華大學(xué)張三 Java知識(shí)點(diǎn)總結(jié)(注解-自定義注解) @(Java知識(shí)點(diǎn)總結(jié))[Java, 注解] 使用@interface自定義注解時(shí),自動(dòng)繼承了java.lan...
摘要:知識(shí)點(diǎn)自定義注解的使用首先我們先介紹自定義注解。元注解的作用就是負(fù)責(zé)注解其他注解。元注解是一個(gè)標(biāo)記注解,闡述了某個(gè)被標(biāo)注的類型是被繼承的。在定義注解時(shí),不能繼承其他的注解或接口。 知識(shí)點(diǎn): Java自定義注解、spring aop @aspect的使用 首先我們先介紹Java自定義注解。 在開(kāi)發(fā)過(guò)程中,我們實(shí)現(xiàn)接口的時(shí)候,會(huì)出現(xiàn)@Override,有時(shí)還會(huì)提示寫@SuppressWa...
閱讀 2306·2021-11-23 10:09
閱讀 2885·2021-10-12 10:11
閱讀 2594·2021-09-29 09:35
閱讀 1337·2019-08-30 15:53
閱讀 2261·2019-08-30 11:15
閱讀 2904·2019-08-29 13:01
閱讀 2290·2019-08-28 18:15
閱讀 3363·2019-08-26 12:13