动态代理的两种方式

静态代理就不说了,基本用到的都是动态代理。

Java中动态代理有JDK动态代理和CGLIB动态代理。

JDK代理的区别是,需要代理的类必须先继承一个接口,接口里是这个类需要代理的方法,在被代理类里面实现接口中的方法(通过接口来暴露出需要代理的方法)。代理类需要实现InvocationHandler这个接口,实现里面的invoke方法,在这个方法中可以在代理方法前后执行一些额外的操作。而获得代理类是需要被代理类实现的那个接口的信息。所以实际上,JDK是通过接口来创建代理类,所以被代理的类必须实现至少一个接口。

CGLIB可以代理没有实现任何接口的类。因为CGLIB是通过Enhancer类来创建被代理类的子类,在用实现MethodInterceptor接口并且重写intercept方法的类来设置回调函数,在intercept里面可以在被代理类方法的前后执行额外的操作。每当被代理类的方法执行时都会进行回调操作,被代理类的所有方法都会被代理。

你可能感兴趣的:(动态代理的两种方式)