动态代理跟静态代理一个很重要的区别在于,动态代理是在内存是中的,是在代码编译期后在内存是实现的,而静态代理是我们自己编写代理类,编译后生成class文件。动态代理需要借助两个类:java.lang.reflect.InvocationHandler和java.lang.reflect.Proxy。我们还是以上边的例子来实现动态代理。首先需要创建一个类,并实现java.lang.reflect.InvocationHandler接口
public class FoodProxy<T> implements InvocationHandler { public T obj; public FoodProxy(T t) { obj = t; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("开始。。。"); Object result = method.invoke(obj, args); System.out.println("结束。。。"); return result; } }