//日志代理类LogProxy.java
package com.yemaozi.action;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.logging.Level;
import java.util.logging.Logger;
//代理类实现了接口InvocationHandler
public class LogProxy implements InvocationHandler {
private Logger logger = Logger.getLogger(this.getClass().getName());
private Object delegate;
//绑定代理对象
public Object bind(Object delegate){
this.delegate = delegate;
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
delegate.getClass().getInterfaces(),this);
}
//针对接口编程
public Object invoke(Object proxy,Method method,Object[] args)throws Throwable{
Object result = null;
try{
//在方法调用前后进行日志输出
logger.log(Level.INFO,args[0]+"开始审核数据...");
result = method.invoke(delegate,args);
logger.log(Level.INFO,args[0]+"审核数据结束...");
} catch(Exception e){
logger.log(Level.INFO,e.toString());
}
return result;
}
}
//接口类TimeBookInterface.java
package com.yemaozi.impl;
public interface TimeBookInterface {
public void doAuditing(String name);
}
//继承接口类的审计类TimeBook.java
package com.yemaozi.action;
import com.yemaozi.impl.TimeBookInterface;
public class TimeBook implements TimeBookInterface{
public void doAuditing(String name){
}
}
//测试类TimeBookTest.java
package com.yemaozi.test;
import com.yemaozi.action.LogProxy;
import com.yemaozi.action.TimeBook;
import com.yemaozi.impl.TimeBookInterface;
public class TimeBookTest {
public static void main(String[] args){
//实现了对日志在重用
LogProxy logProxy = new LogProxy();
TimeBookInterface timeBookProxy =
(TimeBookInterface)logProxy.bind(new TimeBook());
timeBookProxy.doAuditing("张三");
}
}
运行结果:
2009-6-5 16:48:32 com.yemaozi.action.LogProxy invoke
信息: 张三开始审核数据...
2009-6-5 16:48:32 com.yemaozi.action.LogProxy invoke
信息: 张三审核数据结束...
这是<<Spring从入门到精通>>的一个例子,不是很明白,可能是我对java的反射机制还不熟悉在缘故,这里先存疑,哈哈,以后会懂得!