SpringBoot中的@Inherited注解詳解
1. @Inherited
作用:
一個標(biāo)識,用來修飾注解,如果一個類用上了 @Inherited修飾 的注解,那么其子類也會繼承這個注解
注意:
- 接口用上個 @Inherited 修飾的注解,其實現(xiàn)類不會繼承這個注解
- 父類的方法用了@Inherited修飾的注解,子類也不會繼承這個注解
- 當(dāng)用了 @Inherited 修飾的注解的 @Retention 是 RetentionPolicy.RUNTIME ,則增強了繼承性,在反射中可以獲取得到
2. 代碼演示
2.1 創(chuàng)建注解
AAnnotate
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface AAnnotate {
public String name() default "";
}BAnnotate
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface BAnnotate {
public String name() default "";
}2.2 創(chuàng)建父類子類
創(chuàng)建父類SuperClass
@AAnnotate
public class SuperClass {
private int SuperClassx;
public int SuperClassy;
public SuperClass() {
}
//私有
private int SuperClassX(){
return 0;
}
//公有
public int SuperClassY(){
return 0;
}
}創(chuàng)建子類Subclass
@BAnnotate
public class Subclass extends SuperClass {
private int Subclassx;
public int Subclassy;
private Subclass() {
}
public Subclass(int i) {
}
//私有
private int SubclassX() {
return 0;
}
//公有
public int SubclassY() {
return 0;
}
}2.3 測試
class TestMain {
public static void main(String[] args) {
Class<Subclass> clazz = Subclass.class;
System.out.println("============================AnnotatedElement===========================");
//獲取自身和父親的注解。如果@AAnnotate未加@Inherited修飾,則獲取的只是自身的注解而無法獲取父親的注解。
System.out.println(Arrays.toString(clazz.getAnnotations()));
System.out.println("------------------");
}
}3. 反射
以下是對反射的拓展,與本文無關(guān)
class TestMain {
public static void main(String[] args) {
Class<Subclass> clazz = Subclass.class;
System.out.println("============================Field===========================");
// 自身和父親的公有字段
System.out.println(Arrays.toString(clazz.getFields()));
System.out.println("------------------");
//自身所有字段
System.out.println(Arrays.toString(clazz.getDeclaredFields()));
System.out.println("============================Method===========================");
//自身和父親的公有方法
System.out.println(Arrays.toString(clazz.getMethods()));
System.out.println("------------------");
// 自身所有方法
System.out.println(Arrays.toString(clazz.getDeclaredMethods()));
System.out.println("============================Constructor===========================");
//自身公有的構(gòu)造方法
System.out.println(Arrays.toString(clazz.getConstructors()));
System.out.println("------------------");
//自身的所有構(gòu)造方法
System.out.println(Arrays.toString(clazz.getDeclaredConstructors()));
System.out.println("============================AnnotatedElement===========================");
//獲取自身和父親的注解
System.out.println(Arrays.toString(clazz.getAnnotations()));
System.out.println("------------------");
//只獲取自身的注解
System.out.println(Arrays.toString(clazz.getDeclaredAnnotations()));
System.out.println("------------------");
}
}到此這篇關(guān)于SpringBoot中的@Inherited注解詳解的文章就介紹到這了,更多相關(guān)@Inherited注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot中Aspect切面的實現(xiàn)方式(以記錄日志為例)
這篇文章主要介紹了Springboot中Aspect切面的實現(xiàn)方式(以記錄日志為例),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
詳細(xì)解讀Druid數(shù)據(jù)庫連接池的使用
這篇文章主要介紹了Druid數(shù)據(jù)庫連接池的使用,數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是重新建立一個,需要的朋友可以參考下2023-03-03
SpringBoot集成minio實現(xiàn)文件上傳和刪除功能
這篇文章主要介紹了SpringBoot集成minio實現(xiàn)文件上傳和刪除功能,詳細(xì)介紹每個功能的實現(xiàn)步驟和代碼示例,具有一定的參考價值,感興趣的可以了解一下2023-11-11
SpringBoot對Filter過濾器中的異常進行全局處理方案詳解
這篇文章主要介紹了SpringBoot對Filter過濾器中的異常進行全局處理,在SpringBoot中我們通過 @ControllerAdvice 注解和 @ExceptionHandler注解注冊了全局異常處理器,需要的朋友可以參考下2023-09-09
學(xué)生視角看Java 面向?qū)ο蟮睦^承本質(zhì)
繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因為它允許創(chuàng)建分等級層次的類。繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為2022-03-03
高并發(fā)計數(shù)器LongAdder 實現(xiàn)原理與使用場景詳解
這篇文章主要介紹了高并發(fā)計數(shù)器LongAdder 實現(xiàn)原理與使用場景詳解,通過理解 LongAdder 的設(shè)計哲學(xué)和實現(xiàn)細(xì)節(jié),開發(fā)者可以在高并發(fā)場景中做出更優(yōu)的技術(shù)選型,在保證線程安全的前提下實現(xiàn) 5-10 倍的性能提升,需要的朋友可以參考下2025-06-06
POI導(dǎo)出Excel報錯No such file or directory的解決方法
這篇文章主要為大家詳細(xì)介紹了POI導(dǎo)出Excel報錯No such file or directory的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11

