從上面的例子我們看出.只要你是采用面向接口編程,那么,你的任何對象的方法執行之前要加上記錄日志的操作都是可以的.他(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 閱讀(70)
評論(0) 編輯 收藏