问答详情
源自:7-3 Advice扩展

spring ioc的代理是cglib还是jdk

cglib,jdk

提问者:无计留春住 2017-08-04 17:10

个回答

  • qq_Hearingmywor_04183785
    2017-08-05 16:08:34
    已采纳

    1、若代理类无接口,则使用CGLIB代理,否则使用JDK代理。

    2、也可以通过设置proxyTargetClass为true,强制使用CGLIB代理。

    3、如果proxyInterfaces属性被设置为一个或者多个全限定接口名,则使用JDK代理;如果该属性没有被设置,但是目标类实现了接口,也使用JDK代理。

  • 朽木911
    2017-08-05 15:55:32

    Java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

    而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

    1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 
    2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 

    3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换