当前位置: 代码迷 >> 综合 >> spring aop 动态代理两种实现方式:JDK和CGLib
  详细解决方案

spring aop 动态代理两种实现方式:JDK和CGLib

热度:92   发布时间:2024-03-09 18:16:48.0

第一种:JDK这种方式是基于代理类必须实现某一接口,关键类:InvocationHandler 接口和Proxy类。

核心Code:

public class JDKProxy implements InvocationHandler {Object target;public Object bind(Object o){this.target = o;return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),this.target.getClass().getInterfaces(),this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(args[0].toString());return method.invoke(target,args);}
}

第二种:动态代理时采用类继承的方式。核心类:MethodInterceptor

核心Code:

public class CGLibProxy {Object target;public CGLibProxy() {}public Object bind(Object o){this.target = o;Enhancer enhancer = new Enhancer();enhancer.setSuperclass(this.target.getClass());enhancer.setCallback(new MethodInterceptor() {@Overridepublic Object intercept(Object o, Methodmethod, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println("CGLib");return methodProxy.invokeSuper(o,objects);}});return enhancer.create();}
}

 

  相关解决方案