因为需要对一些函数进行二次处理,或是某些函数不让外界知道时,可以使用代理模式,通过访问第三方,间接访问原函数的方式,达到以上目的。类比静态代理,可以发现,代理类不需要实现原接口了,而是实现InvocationHandler。当动态生成的代理类调用方法时,会触发invoke方法,在invoke方法中可以对被代理类的方法进行增强。也就是说只有实现了某个接口的类可以使用Java动态代理机制。可以在上述代码中看到,无论调用哪个方法,都会调用到InvocationHandler的invoke方法,只是参数不同。cglib需要指定父类和回调方法。当然cglib也可以与Java动态代理一样面向接口,因为本质是继承。

Java 动态代理与CGLIB详细介绍

Java 动态代理与CGLIB详细介绍

Java 动态代理与CGLIB详细介绍

Java 动态代理与CGLIB详细介绍

Java 动态代理与CGLIB详细介绍

Java 动态代理与CGLIB详细介绍

Java 动态代理与CGLIB详细介绍

Java 动态代理与CGLIB详细介绍