jialisoftw

          java自定義注解接口

          java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運行時進行解析和使用,起到說明、配置的功能。
          注解不會也不能影響代碼的實際邏輯,僅僅起到輔助性的作用。包含在 java.lang.annotation 包中。 
          1、元注解 
          元注解是指注解的注解。包括  @Retention @Target @Document @Inherited四種。 
          1.1、@Retention: 定義注解的保留策略 
          Java代碼
          1. @Retention(RetentionPolicy.SOURCE) //注解僅存在于源碼中,在class字節碼文件中不包含  
          2. @Retention(RetentionPolicy.CLASS)  //默認的保留策略,注解會在class字節碼文件中存在,但運行時無法獲得,  
          3. @Retention(RetentionPolicy.RUNTIME)//注解會在class字節碼文件中存在,在運行時可以通過反射獲取到  
          1.2、@Target:定義注解的作用目標 
          Java代碼
          1. @Target(ElementType.TYPE)   //接口、類、枚舉、注解  
          2. @Target(ElementType.FIELD) //字段、枚舉的常量  
          3. @Target(ElementType.METHOD) //方法  
          4. @Target(ElementType.PARAMETER) //方法參數  
          5. @Target(ElementType.CONSTRUCTOR)  //構造函數  
          6. @Target(ElementType.LOCAL_VARIABLE)//局部變量  
          7. @Target(ElementType.ANNOTATION_TYPE)//注解  
          8. @Target(ElementType.PACKAGE) ///包  
          elementType 可以有多個,一個注解可以為類的,方法的,字段的等等 
          1.3、@Document:說明該注解將被包含在javadoc中 
          1.4、@Inherited:說明子類可以繼承父類中的該注解 
          下面是自定義注解的一個例子 
          2、注解的自定義 
          Java代碼
          1. @Retention(RetentionPolicy.RUNTIME)  
          2. @Target(ElementType.METHOD)  
          3. public @interface HelloWorld {  
          4.     public String name() default "";  
          5. }  
          3、注解的使用,測試類 
          Java代碼
          1. public class SayHello {  
          2.       
          3.     @HelloWorld(name = " 小明 ")  
          4.     public void sayHello(String name) {  
          5.         System.out.println(name + "say hello world!");  
          6.     }//www.heatpress123.net 
          7. }  
          4、解析注解 
             java的反射機制可以幫助,得到注解,代碼如下: 
          Java代碼 
          1. public class AnnTest {  
          2. public void parseMethod(Class<?> clazz) {  
          3.         Object obj;  
          4.        try {  
          5.             // 通過默認構造方法創建一個新的對象  
          6.             obj = clazz.getConstructor(new Class[] {}).newInstance(  
          7.                     new Object[] {});  
          8.             for (Method method : clazz.getDeclaredMethods()) {  
          9.                 HelloWorld say = method.getAnnotation(HelloWorld.class);  
          10.                 String name = "";  
          11.                 if (say != null) {  
          12.                     name = say.name();  
          13.                     System.out.println(name);  
          14.                     method.invoke(obj, name);  
          15.                 }  
          16.             }  
          17.         } catch (Exception e) {  
          18.             e.printStackTrace();  
          19.         }  
          20.     }  
          21.     public static void main(String[] args) {  
          22.         AnnTest t = new AnnTest();  
          23.         t.parseMethod(SayHello.class);  
          24.     }  
          25. }  
          26.  原文:http://www.software8.co/wzjs/java/1420.html

          posted on 2012-11-23 15:48 飛豬一號 閱讀(1172) 評論(1)  編輯  收藏

          評論

          # re: java自定義注解接口[未登錄] 2012-11-23 20:52 大頭

          學習了。
            回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2012年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          統計

          常用鏈接

          留言簿

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 克东县| 渭南市| 元氏县| 昭苏县| 平安县| 贵定县| 天长市| 克什克腾旗| 昌图县| 延长县| 乌鲁木齐县| 平利县| 繁昌县| 新兴县| 玛沁县| 太原市| 舞阳县| 河南省| 环江| 萨嘎县| 东至县| 莆田市| 咸阳市| 定兴县| 津南区| 青龙| 荣昌县| 汶上县| 大洼县| 星座| 沅陵县| 龙南县| 克山县| 皮山县| 微山县| 兴仁县| 邯郸县| 临桂县| 沾益县| 延庆县| 綦江县|