JDK动态代理(下)

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

10    voidstart(Method method);
11  /**
12      * 方法执行之后的操作
13      *@parammethod
14     */

15    voidend(Method method);
16}

17

我们去写一个实现上面接口的类.我们把作他真正的操作者,如下面是日志操作者的一个类:
LoggerOperation.java
package sinosoft.dj.aop.proxyaop;

import java.lang.reflect.Method;

public class LoggerOperation implements IOperation {

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


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


}


你可能感兴趣的:(JDK动态代理(下))