<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

    基本的需求如下:

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

    具體代碼如下:

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

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

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

        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;
        }
          這是基類中的方法,基類實(shí)現(xiàn)了接口中的execute方法,子類繼承父類,并添加具體的業(yè)務(wù)方法和代碼
       3、
    一個(gè)具體的handler類示例
    @CodeAnnotation(code = "10000001")
        
    public Message method(Message message) {
            System.out.println(message.getUserId());
            
    //TODO:
            return null;
        }
        
    上面的代碼,基本上手工的完成了命令碼和方法的映射,個(gè)人對(duì)Spring還不是很精通,不知道Spring有沒有完成現(xiàn)成的功能,不想重復(fù)早輪子。希望大俠們可以留言告之。

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

    評(píng)論

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

    學(xué)習(xí)了
    主站蜘蛛池模板: 色五月五月丁香亚洲综合网| 亚洲免费在线视频播放| 国产精品亚洲一区二区三区久久 | 久久大香香蕉国产免费网站| 亚洲中文字幕无码日韩| 国产成人精品免费视频大全| 国产成人毛片亚洲精品| a成人毛片免费观看| 亚洲AV永久无码精品成人| 日本一道本不卡免费| 78成人精品电影在线播放日韩精品电影一区亚洲 | 免费一区二区视频| igao激情在线视频免费| 亚洲精品乱码久久久久久 | 5g影院5g天天爽永久免费影院| 1区1区3区4区产品亚洲| 97热久久免费频精品99| 亚洲国产午夜精品理论片在线播放 | 免费人成视频在线播放| 亚洲自偷自偷偷色无码中文| 成av免费大片黄在线观看| 亚洲视频精品在线| 成人免费在线视频| 一个人免费观看日本www视频| 亚洲精品国产精品乱码在线观看| 91精品啪在线观看国产线免费| 亚洲Av高清一区二区三区| 免费国产美女爽到喷出水来视频| GOGOGO高清免费看韩国| 亚洲高清无在码在线电影不卡 | 国产精品福利片免费看| 久久久无码精品亚洲日韩京东传媒| 嫖丰满老熟妇AAAA片免费看| jizzjizz亚洲日本少妇| 亚洲av无码一区二区三区网站 | 亚洲国产免费综合| 久久精品人成免费| 亚洲成av人片在www鸭子| 国产亚洲一区二区三区在线观看| 噼里啪啦免费观看高清动漫4| jizz18免费视频|