🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 动态代理实现 > `JDK代理` 实现`InvocationHandler`接口并实现`invoke(Object proxy, Method method, Object[] args)`方法 ep: ~~~ public class StudentInvocation<T> implements InvocationHandler{ ​ private T t; public StudentInvocation(T t) { this.t = t; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws         Throwable { System.out.println("-----方法执行前----"); System.out.println("方法名:"+method.getName()); Object result = method.invoke(t, args); System.out.println("结果:"+ result); System.out.println("-----方法执行后----"); return result; } ​    /** * 创建代理类 * @return */ public T createProxy() { return (T) Proxy.newProxyInstance(t.getClass().getClassLoader(), t.getClass().getInterfaces(), this); } } ~~~ > `CJLB代理` 实现`MethodInterceptor`并实现方法`intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3)`方法 ep: ~~~ public class CglbProxy implements MethodInterceptor { ​ @Override public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {  System.out.println("cglb执行前"); // Object invokeSuper = arg3.invoke(arg0, arg2);  Object invokeSuper = arg3.invokeSuper(arg0, arg2);  System.out.println("cglb执行后");  return invokeSuper; } /** * 创建代理类 * @param clazz * @return */ public Object createProxy(Class clazz) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(clazz); enhancer.setCallback(this); return enhancer.create(); } ​ } ~~~ **tip:注解的实现** 注解的实现也是用了代理类,其中会将在注解中设置的属性放入其实现代理类的`memberValues`字段中。