jdk动态代理
Posted zhaolei1996
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk动态代理相关的知识,希望对你有一定的参考价值。
jdk实现的动态代理只能是基于接口的;即被代理的对象
生成动态代理的类:
public class ProxyTool { /** * 需要被代理的类 */ private Object obj; public ProxyTool(Object obj){ this.obj = obj; } /** * Proxy.newProxyInstance()方法有三个参数: * ClassLoader:用于加载代理对象的字节码,与被代理对象的类加载器保持一致,固定写法 * Class[]:字节码数据,用于让代理类与被代理类有相同的方法,固定写法 * InvocationHandler: 用于提供增强的代码,InvocationHandler接口中有一个方法 invoke() * * * invoke中有三个参数: * proxy:代理对象 * method:当前执行的方法 * args:当前执行方法的参数 * @return */ public Object getProxy(){ return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws InvocationTargetException, IllegalAccessException { //写增强代码的地方 System.out.println("动态代理生效"); return method.invoke(obj,args); } }); } }
测试方法:
public class Main { public static void main(String[] args) { //被代理对象 IProxyImpl proxy1 = new IProxyImpl(); //代理工具 ProxyTool ProxyTool = new ProxyTool(proxy1); //获取到代理类,这个地方只能强转为接口,强转为实现类会报错 IProxy proxy = (IProxy)ProxyTool.getProxy(); //执行方法 proxy.print(); } }
以上是关于jdk动态代理的主要内容,如果未能解决你的问题,请参考以下文章