數(shù)據(jù)加載中……
          java Annotation初用

          對(duì)java的Annotation不是太熟悉,不過(guò)最近又要用,所以就找了相關(guān)的文檔看了下,并寫(xiě)了一個(gè)Demo

          基本的需求如下:

          Server根據(jù)對(duì)方傳遞的類(lèi)型碼找到具體的某個(gè)類(lèi)的具體方法并運(yùn)行。個(gè)人覺(jué)得用Annotation去注釋代碼比較好,也減少配置文件,所以就體驗(yàn)了一把。

          具體代碼如下:

          1、先定義一個(gè)自己的Annotation

          @Retention(RetentionPolicy.RUNTIME)
          public @interface CodeAnnotation {
              String code();
          }

               這里一定要將自己的Annotation定義為運(yùn)行時(shí)的,默認(rèn)好像是編譯時(shí)的,所以無(wú)法動(dòng)態(tài)的根據(jù)server接收到的code去匹配函數(shù)
             2、
          @Override定義父類(lèi)basicHandler通過(guò)放射去獲取執(zhí)行子類(lèi)的方法

              public Message execute(Message message) {
                  String code 
          = message.getCode();
                  String className 
          = this.getClass().getName();
                  Message msg 
          = null;
                  
          try {
                      
          for (Method m : Class.forName(className).getMethods()) {
                          
          if (m.getAnnotation(CodeAnnotation.class!= null) {
                              
          if (code.equals(m.getAnnotation(CodeAnnotation.class).code())) {
                                  
          try {
                                      msg 
          = (Message)m.invoke(this, message);
                                  } 
          catch (IllegalArgumentException e) {
                                      e.printStackTrace();
                                  } 
          catch (IllegalAccessException e) {
                                      e.printStackTrace();
                                  } 
          catch (InvocationTargetException e) {
                                      e.printStackTrace();
                                  }
                              }
                          }
                      }
                  } 
          catch (SecurityException e) {
                      e.printStackTrace();
                  } 
          catch (ClassNotFoundException e) {
                      e.printStackTrace();
                  }
                  
          return msg;
              }
                這是基類(lèi)中的方法,基類(lèi)實(shí)現(xiàn)了接口中的execute方法,子類(lèi)繼承父類(lèi),并添加具體的業(yè)務(wù)方法和代碼
             3、
          一個(gè)具體的handler類(lèi)示例
          @CodeAnnotation(code = "10000001")
              
          public Message method(Message message) {
                  System.out.println(message.getUserId());
                  
          //TODO:
                  return null;
              }
              
          上面的代碼,基本上手工的完成了命令碼和方法的映射,個(gè)人對(duì)Spring還不是很精通,不知道Spring有沒(méi)有完成現(xiàn)成的功能,不想重復(fù)早輪子。希望大俠們可以留言告之。

          posted on 2012-01-21 01:19 潘潘.eagle 閱讀(1716) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): JAVA

          評(píng)論

          # re: java Annotation初用 2012-01-23 23:12 tb

          學(xué)習(xí)了
          主站蜘蛛池模板: 金湖县| 乐昌市| 台山市| 靖远县| 隆子县| 鹰潭市| 红河县| 尉犁县| 肇州县| 许昌县| 枣庄市| 保康县| 孟津县| 徐州市| 南平市| 正镶白旗| 宿迁市| 双牌县| 黑山县| 西贡区| 府谷县| 宁陵县| 寿宁县| 吕梁市| 昌宁县| 昆山市| 大关县| 承德县| 田阳县| 鲜城| 保康县| 积石山| 万安县| 汶川县| 吴旗县| 昌吉市| 融水| 乌兰察布市| 乌兰浩特市| 金堂县| 大理市|