JAVA——动态代理

来源:互联网 发布:侠义 知乎 编辑:程序博客网 时间:2024/06/03 17:07
package test;public interface Jisuan {int add(int a,int b);int mul(int a,int b);}


package test;public class JisuanImp implements Jisuan{@Overridepublic int add(int a, int b) {// TODO Auto-generated method stubreturn 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.匿名内部类InvocationHandlerJisuan 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

原创粉丝点击