• spring 代理


    java动态代理实现

    1. Java自带的动态代理,反射生成字节码

    2. Cglib调用asm生成子类

    spring 中代理实现

    1. 如果类实现了接口,使用java动态代理

    2. 没有实现接口,使用cglib,生成子类字节码

    原因:

    1. jdk自带动态代理性能比cglib较好(待确认)

    2. jdk自带动态代理,需要继承接口,不够灵活

    spring 代理对象生成源码

    public class DefaultAopProxyFactory implements AopProxyFactory, Serializable {
    
        @Override
        public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {
            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.");
                }
                if (targetClass.isInterface() || Proxy.isProxyClass(targetClass)) {
                    return new JdkDynamicAopProxy(config);
                }
                return new ObjenesisCglibAopProxy(config);
            }
            else {
                return new JdkDynamicAopProxy(config);
            }
        }

    代码可以很清楚看到,什么时候使用jdk动态代理,什么时候使用cglib

  • 相关阅读:
    埋点和用户画像
    HDR 2 数据集预处理
    HDR 1(介绍)
    关于AR
    Android驱动
    修改用户登陆次数
    使用plsql developer报错
    oracle客户端卸载
    项目:搜索查找
    使用BeautifulSoup模块解析HTML(文件example.html)
  • 原文地址:https://www.cnblogs.com/luckygxf/p/9510600.html
Copyright © 2020-2023  润新知