本帖最后由 朱明仁 于 2015-3-15 00:34 编辑
Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),new InvocationHandler(){。。。。。这里面InvocationHandler是作为内部类传入的,所在的代码黏贴在下面:
/*
* proxy4代理的可以是其他有接口的对象
*/
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList target=new ArrayList();
Advice_1 advice=new MyAdvice_1();
List proxy=(List)getProxy(target,advice);
proxy.add(232);
//System.out.println(proxy.isEmpty());
}
public static Object getProxy(final ArrayList target,final Advice_1 advice){
Object proxy=Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler(){
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
// TODO Auto-generated method stub
advice.beforeMethod();
long start=System.currentTimeMillis();
Object retVal=method.invoke(target, args);
long end=System.currentTimeMillis();
//System.out.println(end-start+" milliseconds");
return retVal;
}
});
return proxy;
}
}
class MyAdvice_1 implements Advice_1{
public void beforeMethod(){
System.out.println("方法前输出。。。。。");
}
}
interface Advice_1{
public abstract void beforeMethod();
}
|