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

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

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

    posts - 495,  comments - 11,  trackbacks - 0
    然后我們要改一下代理對象DynaProxyHello中的代碼.如下:
    1packagesinosoft.dj.aop.proxyaop;
    2
    3importjava.lang.reflect.InvocationHandler;
    4importjava.lang.reflect.Method;
    5importjava.lang.reflect.Proxy;
    6
    7publicclassDynaProxyHelloimplementsInvocationHandler{
    8??/**
    9????? * 操作者
    10?????*/

    11????privateObject proxy;
    12??/**
    13????? * 要處理的對象(也就是我們要在方法的前后加上業務邏輯的對象,如例子中的Hello)
    14?????*/

    15????privateObject delegate;
    16
    17/**
    18????? * 動態生成方法被處理過后的對象 (寫法固定)
    19????? *
    20????? *@paramdelegate
    21????? *@paramproxy
    22????? *@return
    23?????*/

    24????publicObject bind(Object delegate,Object proxy){
    25????????
    26????????this.proxy=proxy;
    27????????this.delegate=delegate;
    28????????returnProxy.newProxyInstance(
    29????????????????this.delegate.getClass().getClassLoader(),this.delegate
    30???????????????????????? .getClass().getInterfaces(),this);
    31???? }

    32??/**
    33????? * 要處理的對象中的每個方法會被此方法送去JVM調用,也就是說,要處理的對象的方法只能通過此方法調用
    34????? * 此方法是動態的,不是手動調用的
    35?????*/

    36????publicObject invoke(Object proxy, Method method, Object[] args)
    37????????????throwsThrowable{
    38???????? Object result=null;
    39????????try{
    40????????????//反射得到操作者的實例
    41???????????? Class clazz=this.proxy.getClass();
    42????????????//反射得到操作者的Start方法
    43???????????? Method start=clazz.getDeclaredMethod("start",
    44????????????????????newClass[]{ Method.class});
    45????????????//反射執行start方法
    46???????????? start.invoke(this.proxy,newObject[]{ method });
    47????????????//執行要處理對象的原本方法
    48???????????? result=method.invoke(this.delegate, args);
    49//???????????? 反射得到操作者的end方法
    50???????????? Method end=clazz.getDeclaredMethod("end",
    51????????????????????newClass[]{ Method.class});
    52//???????????? 反射執行end方法
    53???????????? end.invoke(this.proxy,newObject[]{ method });
    54
    55???????? }
    catch(Exception e){
    56???????????? e.printStackTrace();
    57???????? }

    58????????returnresult;
    59???? }

    60
    61}

    62

    然后我們把Test.java中的代碼改一下.測試一下:
    packagesinosoft.dj.aop.proxyaop;

    publicclassTest{
    ????
    publicstaticvoidmain(String[] args){
    ???????? IHello hello
    =(IHello)newDynaProxyHello().bind(newHello(),newLoggerOperation());
    ???????? hello.sayGoogBye(
    "Double J");
    ???????? hello.sayHello(
    "Double J");
    ????????
    ???? }

    }

    結果還是一樣的吧.

    如果你想在每個方法之前加上日志記錄,而不在方法后加上日志記錄.你就把LoggerOperation類改成如下:
    1packagesinosoft.dj.aop.proxyaop;
    2
    3importjava.lang.reflect.Method;
    4
    5publicclassLoggerOperationimplementsIOperation{
    6
    7????publicvoidend(Method method){
    8????????//Logger.logging(Level.DEBUGE, method.getName() + " Method end.");
    9???? }

    10
    11????publicvoidstart(Method method){
    12???????? Logger.logging(Level.INFO, method.getName()+"Method Start!");
    13???? }

    14
    15}

    16

    運行一下.你就會發現,每個方法之后沒有記錄日志了. 這樣,我們就把代理者和操作者解藕了!

    下面留一個問題給大家,如果我們不想讓所有方法都被日志記錄,我們應該怎么去解藕呢.?
    我的想法是在代理對象的public Object invoke(Object proxy, Method method, Object[] args)方法里面加上個if(),對傳進來的method的名字進行判斷,判斷的條件存在XML里面.這樣我們就可以配置文件時行解藕了.如果有興趣的朋友可以把操作者,被代理者,都通過配置文件進行配置 ,那么就可以寫一個簡單的SpringAOP框架了.
    posted on 2009-07-24 20:43 jadmin 閱讀(95) 評論(0)  編輯  收藏

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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 久久亚洲2019中文字幕| 0588影视手机免费看片| 成人爱做日本视频免费| 亚洲an日韩专区在线| 希望影院高清免费观看视频| 亚洲黄网站wwwwww| 1000部国产成人免费视频| 91午夜精品亚洲一区二区三区| 在线永久看片免费的视频| 亚洲国产韩国一区二区| 毛片免费观看的视频在线| 亚洲欧美日韩自偷自拍| 免费成人av电影| 中国一级特黄高清免费的大片中国一级黄色片 | 亚洲人成中文字幕在线观看| 男女一进一出抽搐免费视频| 美女啪啪网站又黄又免费| 免费一级特黄特色大片在线观看| 一级午夜免费视频| 亚洲AV无码专区电影在线观看 | 曰批全过程免费视频免费看 | 免费v片在线观看品善网| 日韩少妇内射免费播放| 亚洲国产精品VA在线看黑人| 在线免费观看国产| 亚洲av日韩精品久久久久久a| 亚洲中文字幕成人在线| 免费视频成人片在线观看| 亚洲天堂免费在线| 亚洲精品无码专区2| 免费人成视频在线观看网站 | a一级毛片免费高清在线| 亚洲天堂中文字幕| 精品剧情v国产在免费线观看| 中文字幕高清免费不卡视频| 亚洲精品在线播放| 亚洲福利精品电影在线观看| 亚洲熟妇少妇任你躁在线观看| 亚洲日韩在线中文字幕第一页 | 亚洲午夜电影在线观看高清| 又大又黄又粗又爽的免费视频|