java 自定義注解的實(shí)例詳解
java 自定義注解的實(shí)例詳解
Java的Annotation是在5.0版本之后引入的,可以用于創(chuàng)建文檔,跟蹤代碼中的依賴性,并且可以執(zhí)行編譯時(shí)期檢查。注解就是給虛擬機(jī)看的,代表程序的一些特殊的功能。JDK中提供了@Override,@SuppressWarning,@Deprecated三種注解,當(dāng)讓還有元注解,@Target,@Retention,@Documented,@Inherited,元注解的作用負(fù)責(zé)注解其它注解。
要想了解注解,就要了解自定義注解,了解是通過反射來實(shí)現(xiàn)的。
首先,我們先自定義一個(gè)注解,
@Retention(value=RetentionPolicy.RUNTIME) public @interface MyTest { }
接著再寫一個(gè)測試demo
public class AnnotationDemo1 { @MyTest public void demo1(){ System.out.println("方法1..."); } @MyTest public void demo2(){ System.out.println("方法2..."); } @Test public void demo3(){ System.out.println("方法3..."); }
最后要讓AnnotationDemo1中所有帶Mytest注解的方法運(yùn)行,接下來是運(yùn)行類
public class DemoRunner { public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException { //獲得測試類的class Class clazz=AnnotationDemo1.class; //獲得class中的所有的方法 Method[] mothods=clazz.getMethods(); //遍歷每個(gè)方法, for(Method method:mothods){ boolean flag = method.isAnnotationPresent(MyTest.class); System.out.println(flag); if(flag){ // 說明方法上有MyTest注解: method.invoke(clazz.newInstance(), null); } } } }
最后測試就能輸出方法1...和方法2了...,這樣也就簡單實(shí)現(xiàn)自定義注解了。
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
如何使用IDEA創(chuàng)建MAPPER模板過程圖解
這篇文章主要介紹了如何使用IDEA創(chuàng)建MAPPER模板,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05java輸出1~100之間的全部素?cái)?shù)的5種方式總結(jié)
這篇文章主要介紹了java輸出1~100之間的全部素?cái)?shù)的5種方式總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Java實(shí)現(xiàn)同步枚舉類數(shù)據(jù)到數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)同步枚舉類數(shù)據(jù)到數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08MyBatis傳入List集合查詢數(shù)據(jù)問題
這篇文章主要介紹了MyBatis傳入List集合查詢數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02Java lombok中@Accessors注解三個(gè)屬性的作用
這篇文章主要介紹了Java?lombok的@Accessors注解屬性解析,該注解主要作用是:當(dāng)屬性字段在生成?getter?和?setter?方法時(shí),做一些相關(guān)的設(shè)置,需要的朋友可以參考下2023-05-05