CGLib采用底层的字节码技术,可以为一个类创建子类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。
代理类实现MethodInterceptor接口,接口中的intercept方法拦截所有目标方法的调用
Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy); //目标类、目标类方法的反射对象、方法入参、代理类实例
private Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(clazz); //设置需要创建子类的类
enhancer.setCallback(this)'
return enhancer.create(); //通过字节码技术动态创建子类实例
对于单例的代理,推荐使用CGLib;对于其他作用域类型的代理,最好使用JDK动态代理。原因是虽然CGLib创建代理时速度慢,但创建出的代理对象运行效率高;而JDK创建的代理表现正好相反’