public interface ImyProxy {
public void proxy(String s);
}
package proxy;
public class MyProxy implements ImyProxy {
/* (non-Javadoc)
* @see proxy.ImyProxy#proxy()
*/
@Override
public void proxy(String s){
System.out.println("方法执行"+s);
}
public void proxy(int a,String b,Object o){
System.out.println("方法执行"+a+b+o);
}
}
package proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyProxyHandler implements InvocationHandler {
private Object obj;
private MyIntercepter intercepter;
public MyProxyHandler(Object obj){
this.obj=obj;
}
public void setIntercepter(MyIntercepter intercepter){
this.intercepter=intercepter;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
intercepter.before();
Object o=method.invoke(obj, args);
intercepter.afrer();
return o;
}
}
package proxy;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyProxyTest {
/**
* @param args
*/
public static void main(String[] args) {
ImyProxy mp=new MyProxy();
InterceperImp imp=new InterceperImp();
MyProxyHandler mh=new MyProxyHandler(mp);
mh.setIntercepter(imp);
ImyProxy ip=(ImyProxy)Proxy.newProxyInstance(ImyProxy.class.getClassLoader(), MyProxy.class.getInterfaces(), mh);
ip.proxy("ddddddddd");
System.out.println("------------------------------");
try{
Method method=MyProxy.class.getMethod("proxy",String.class);
System.out.println(method.getParameterTypes()[0].getSimpleName());
method.invoke(MyProxy.class.newInstance(), "dddd");
}catch(Exception e){
e.printStackTrace();
}
}
}