package test;
public interface Jisuan {
int add(int a,int b);
int mul(int a,int b);
}
package test;
public class JisuanImp implements Jisuan{
@Override
public int add(int a, int b) {
// TODO Auto-generated method stub
return a+b;
}
public int mul(int a, int b) {
return a*b;
};
}
package test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class test {
public static void main(String[] args) {
//需要创建一个被代理对象
Jisuan jisuan=new JisuanImp();
//创建代理对象 Proxy.newProxyInstance传入三个参数 1.被代理对象的类加载器 2.被代理对象所实现的接口 3.匿名内部类InvocationHandler
Jisuan proxy=(Jisuan) Proxy.newProxyInstance(jisuan.getClass().getClassLoader(), jisuan.getClass().getInterfaces(), new InvocationHandler() {
@Override
//proxy:代理对象 ,method:正在被调用的方法 ,args:调用方法时传入的参数
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("现在执行的是"+method.getName()+"方法");
//调用被代理类的目标方法 注意第一个参数一定是被代理类对象 不能是proxy!!!
Object res=method.invoke(jisuan, args);
return res;
}
});
int res=proxy.add(3, 5);
System.out.println(res);
}
}
打印输出:
现在执行的是add方法
8