基于JDK的动态代理实现一个简单例子
JDK提供的一个Proxy.newProxyInstance()创建了一个Eat接口对象。这种没有实现类但是在运行期动态创建了一个接口对象的方式,我们称为动态代码。JDK提供的动态创建接口对象的方式,就叫动态代理。
package com.zhao.common.util; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 基于JDK 实现一个简单的动态代理 */ public class DynamicProxy { public static void main(String[] args) { /** * 定义一个InvocationHandler实例,它负责实现接口的方法调用; * 通过Proxy.newProxyInstance()创建interface实例,它需要3个参数: * 使用的ClassLoader,通常就是接口类的ClassLoader; * 需要实现的接口数组,至少需要传入一个接口进去; * 用来处理接口方法调用的InvocationHandler实例。 * 将返回的Object强制转型为接口。 */ InvocationHandler handler=new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理类名称:"+proxy.getClass().getName()); if(method.getName().equals("food")){ System.out.println("吃了 "+args[0]); return null; } if(method.getName().equals("number")){ System.out.println("数字 : "+args[0]+" "+args[1]); return (int)args[0]+(int)args[1]; } return null; } }; Eat eat= (Eat) Proxy.newProxyInstance(Eat.class.getClassLoader(),new Class[]{Eat.class},handler); eat.food("空气"); System.out.println("总和 "+eat.number(3, 16)); } }
接口
package com.zhao.common.util; public interface Eat { void food(String name); Integer number(int a,int b); }
参考:https://www.liaoxuefeng.com/wiki/1252599548343744/1264804593397984

浙公网安备 33010602011771号