java动态代理技术与CGLIB代理的差别

JDK实现动态代理的条件是被代理的类一定要通过接口来定义业务方法,而CGLIB代理可以弥补它只能针对代理类一定要通过接口来定义业务的这个不足。

CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。

性能方面的比较:
CGLib创建的动态代理对象性能比JDK创建的动态代理对象的性能要高;
CGLib在创建代理对象时所花费的时间却比JDK要多;

使用场景:
对于单例的对象,因为无需频繁创建对象,用CGLib合适,反之,使用JDK方式要更为合适一些。同时,由于CGLib由于是采用动态创建子类的方法,对于final方法,无法进行代理。

你可能感兴趣的:(java动态代理)