从上面的例子我们看出.只要你是采用面向接口编程,那么,你的任何对象的方法执行之前要加上记录日志的操作都是可以的.他(DynaPoxyHello)自动去代理执行被代理对象(Hello)中的每一个方法,一个java.lang.reflect.InvocationHandler接口就把我们的代理对象和被代理对象解藕了.但是,我们又发现还有一个问题,这个DynaPoxyHello对象只能跟我们去在方法前后加上日志记录的操作.我们能不能把DynaPoxyHello对象和日志操作对象(Logger)解藕呢?结果是肯定的.让我们来分析一下我们的需求.我们要在被代理对象的方法前面或者后面去加上日志操作代码(或者是其它操作的代码),那么,我们可以抽象出一个接口,这个接口里就只有两个方法,一个是在被代理对象要执行方法之前执行的方法,我们取名为start,第二个方法就是在被代理对象执行方法之后执行的方法,我们取名为end .接口定义如下 :1
packagesinosoft.dj.aop.proxyaop;
2
3
importjava.lang.reflect.Method;
4
5
publicinterfaceIOperation{
6
  /**
7
      * 方法执行之前的操作
8
      *@parammethod
9
     */
10
    voidstart(Method method);
11
  /**
12
      * 方法执行之后的操作
13
      *@parammethod
14
     */
15
    voidend(Method method);
16
}
17
 我们去写一个实现上面接口的类.我们把作他真正的操作者,如下面是日志操作者的一个类:LoggerOperation.java
packagesinosoft.dj.aop.proxyaop;

importjava.lang.reflect.Method;


publicclassLoggerOperationimplementsIOperation{


    publicvoidend(Method method){
         Logger.logging(Level.DEBUGE, method.getName()+"Method end
.");
     }


    publicvoidstart(Method method){
         Logger.logging(Level.INFO, method.getName()+"Method Start!");
     }

}

 
	posted on 2009-07-24 20:42 
jadmin 阅读(87) 
评论(0)  编辑  收藏