JDK动态代理(下)
从上面的例子我们看出.只要你是采用面向接口编程,那么,你的任何对象的方法执行之前要加上记录日志的操作都是可以的.他(DynaPoxyHello)自动去代理执行被代理对象(Hello)中的每一个方法,一个java.lang.reflect.InvocationHandler接口就把我们的代理对象和被代理对象解藕了.但是,我们又发现还有一个问题,这个DynaPoxyHello对象只能跟我们去在方法前后加上日志记录的操作.我们能不能把DynaPoxyHello对象和日志操作对象(Logger)解藕呢?
结果是肯定的.让我们来分析一下我们的需求.
我们要在被代理对象的方法前面或者后面去加上日志操作代码(或者是其它操作的代码),
那么,我们可以抽象出一个接口,这个接口里就只有两个方法,一个是在被代理对象要执行方法之前执行的方法,我们取名为start,第二个方法就是在被代理对象执行方法之后执行的方法,我们取名为end .接口定义如下 :
我们去写一个实现上面接口的类.我们把作他真正的操作者,如下面是日志操作者的一个类:
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!");
}

}

结果是肯定的.让我们来分析一下我们的需求.
我们要在被代理对象的方法前面或者后面去加上日志操作代码(或者是其它操作的代码),
那么,我们可以抽象出一个接口,这个接口里就只有两个方法,一个是在被代理对象要执行方法之前执行的方法,我们取名为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
packagesinosoft.dj.aop.proxyaop;2

3
importjava.lang.reflect.Method;4

5
publicinterfaceIOperation{6
/**7
* 方法执行之前的操作8
*@parammethod9
*/10
voidstart(Method method);11
/**12
* 方法执行之后的操作13
*@parammethod14
*/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!");
}
}


浙公网安备 33010602011771号