spring aop学习8:spring对jdk和cglib动态代理的选择

来源:互联网 发布:手机dns优选软件 编辑:程序博客网 时间:2024/06/07 00:50

一.spring对jdk和cglib动态代理的选择
1.查看spring源码:
org.springframework.aop.framework.DefaultAopProxyFactory.java

createAopProxy(){}
方法:

@Override    public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {        //◆如果目标对象实现了接口,且强制cglib代理,则使用cglib代理        if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) {            Class<?> targetClass = config.getTargetClass();            if (targetClass == null) {                throw new AopConfigException("TargetSource cannot determine target class: " +                        "Either an interface or a target is required for proxy creation.");            }            //◆如果目标对象实现了接口,则采用JDK动态代理            if (targetClass.isInterface()) {                return new JdkDynamicAopProxy(config);            }            //◆如果目标对象没有实现接口,则采用Cglib动态代理            return new ObjenesisCglibAopProxy(config);        }        else {            return new JdkDynamicAopProxy(config);        }    }

2.得出结论:
◆如果目标对象实现了接口,则采用JDK动态代理
◆如果目标对象没有实现接口,则采用Cglib动态代理
◆如果目标对象实现了接口,且强制cglib代理,则使用cglib代理

阅读全文
0 0
原创粉丝点击