<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

    但是我們會發現一個問題,如果我們像Hello這樣的類很多,那么,我們是不是要去寫很多個HelloProxy這樣的類呢.沒錯,是的.其實也是一種很麻煩的事.在jdk1.3以后.jdk跟我們提供了一個API?? java.lang.reflect.InvocationHandler的類. 這個類可以讓我們在JVM調用某個類的方法時動態的為些方法做些什么事.讓我們把以上的代碼改一下來看看效果.
    同樣,我們寫一個IHello的接口和一個Hello的實現類.在接口中.我們定義兩個方法;代碼如下 :

    IHello.java

    1package sinosoft.dj.aop.proxyaop;
    2
    3public interface IHello {
    4??/**
    5????? * 業務處理A方法
    6????? * @param name
    7?????*/

    8????void sayHello(String name);
    9??/**
    10????? * 業務處理B方法
    11????? * @param name
    12?????*/

    13????void sayGoogBye(String name);
    14}

    15



    Hello.java

    1package sinosoft.dj.aop.proxyaop;
    2
    3public class Hello implements IHello {
    4
    5????public void sayHello(String name) {
    6???????? System.out.println("Hello " + name);
    7???? }

    8????public void sayGoogBye(String name) {
    9???????? System.out.println(name+" GoodBye!");
    10???? }

    11}

    12


    我們一樣的去寫一個代理類.只不過.讓這個類去實現java.lang.reflect.InvocationHandler接口,代碼如下:

    1package sinosoft.dj.aop.proxyaop;
    2
    3import java.lang.reflect.InvocationHandler;
    4import java.lang.reflect.Method;
    5import java.lang.reflect.Proxy;
    6
    7public class DynaProxyHello implements InvocationHandler {
    8
    9???/**
    10????? * 要處理的對象(也就是我們要在方法的前后加上業務邏輯的對象,如例子中的Hello)
    11?????*/

    12????private Object delegate;
    13
    14/**
    15????? * 動態生成方法被處理過后的對象 (寫法固定)
    16????? *
    17????? * @param delegate
    18????? * @param proxy
    19????? * @return
    20?????*/

    21????public Object bind(Object delegate) {
    22????????this.delegate = delegate;
    23????????return Proxy.newProxyInstance(
    24????????????????this.delegate.getClass().getClassLoader(), this.delegate
    25???????????????????????? .getClass().getInterfaces(), this);
    26???? }

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

    31????public Object invoke(Object proxy, Method method, Object[] args)
    32????????????throws Throwable {
    33???????? Object result = null;
    34????????try {
    35????????????//執行原來的方法之前記錄日志
    36???????????? Logger.logging(Level.DEBUGE, method.getName() + " Method end .");
    37????????????
    38????????????//JVM通過這條語句執行原來的方法(反射機制)
    39???????????? result = method.invoke(this.delegate, args);
    40????????????//執行原來的方法之后記錄日志
    41???????????? Logger.logging(Level.INFO, method.getName() + " Method Start!");
    42???????? }
    catch (Exception e) {
    43???????????? e.printStackTrace();
    44???????? }

    45????????//返回方法返回值給調用者
    46????????return result;
    47???? }

    48
    49}

    50


    上面類中出現的Logger類和Level枚舉還是和上一上例子的實現是一樣的.這里就不貼出代碼了.

    讓我們寫一個Test類去測試一下.代碼如下:
    Test.java

    1package sinosoft.dj.aop.proxyaop;
    2
    3public class Test {
    4????public static void main(String[] args) {
    5???????? IHello hello = (IHello)new DynaProxyHello().bind(new Hello());
    6???????? hello.sayGoogBye("Double J");
    7???????? hello.sayHello("Double J");
    8????????
    9???? }

    10}

    11


    運行輸出的結果如下:

    Tue Mar 04 21:24:03 CST 2008 sayGoogBye Method end .
    Double J GoodBye!
    2008-3-4 21:24:03 sayGoogBye Method Start!
    Tue Mar
    04 21:24:03 CST 2008 sayHello Method end .
    Hello Double J
    2008-3-4 21:24:03 sayHello Method Start!


    由于線程的關系,第二個方法的開始出現在第一個方法的結束之前.這不是我們所關注的!

    posted on 2009-07-24 20:40 jadmin 閱讀(87) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 爱情岛论坛免费视频| 国产免费拔擦拔擦8X高清在线人| 中文字幕在线观看亚洲视频| 国产AV日韩A∨亚洲AV电影| 野花香高清视频在线观看免费| 亚洲国产中文v高清在线观看| 久久久久亚洲AV无码观看| 女bbbbxxxx另类亚洲| 99精品视频免费观看| 亚洲日韩在线第一页| 中文字幕乱码亚洲无线三区 | 亚洲AV日韩AV高潮无码专区| 亚洲jjzzjjzz在线观看| 色www永久免费| 国产免费观看黄AV片 | 亚洲最大中文字幕无码网站| 最新亚洲成av人免费看| 国产亚洲婷婷香蕉久久精品| 精品国产亚洲AV麻豆 | 亚洲av无码成人精品国产| 亚洲日本在线免费观看| 国产成人精品日本亚洲专区| 国产成人无码精品久久久免费| 永久免费bbbbbb视频| 亚洲精品午夜在线观看| 中文字幕不卡免费视频| 亚洲国产日韩在线观频| 伊人久久大香线蕉免费视频| 在线观看亚洲人成网站| 妞干网在线免费视频| 亚洲最大的成人网| 亚洲AV无码乱码精品国产| 羞羞漫画在线成人漫画阅读免费| 国产成人亚洲精品影院| 69视频在线是免费观看| 中文字幕亚洲免费无线观看日本| 噼里啪啦电影在线观看免费高清 | 国产黄在线播放免费观看| 亚洲AV日韩AV永久无码绿巨人| 永久免费毛片在线播放 | 亚洲AV综合永久无码精品天堂|