当前位置: 首页 > news >正文

b2c网站 架构/互联网推广的好处

b2c网站 架构,互联网推广的好处,甘肃两学一做网站,邮政营销案例100例2019独角兽企业重金招聘Python工程师标准>>> proxy-target-class属性值决定是基于接口的还是基于类的代理被创建,TRUE则是基于类的代理将起作用(需要cglib库), 为FALSE或者省略这个属性,则标准的JDK 基于接口的代理将起…

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

proxy-target-class属性值决定是基于接口的还是基于类的代理被创建,
TRUE则是基于类的代理将起作用(需要cglib库), 为FALSE或者省略这个属性,则标准的JDK 基于接口的代理将起作用

 

源码解析:

AopNamespaceHandler类,就是spring解析<aop:configproxy-target-class="true">配置的入口,(一般而言,spring的xml中的标签一定是在<beans> 中定义了xmlns及xsi:schemaLocation定义了,并有【 xxxNamespaceHandler 作为xml元素的解析)

则可以看到init方法里注册了ConfigBeanDefinitionParser类来解析,这个类则是实际解析<aop:config proxy-target-class="true">的类

registerBeanDefinitionParser("config",new ConfigBeanDefinitionParser());

打开这个类搜索proxy-target-class,则可以看到configureAutoProxyCreator方法,这个方法则是解析proxy-target-class属性的方法

private void configureAutoProxyCreator(ParserContext parserContext, Element element) {AopNamespaceUtils.registerAspectJAutoProxyCreatorIfNecessary(parserContext, element);
}

进入这个方法,再进入useClassProxyingIfNecessary方法则可以看到

boolean proxyTargetClass = 
Boolean.valueOf(sourceElement.getAttribute(PROXY_TARGET_CLASS_ATTRIBUTE));
if (proxyTargetClass) {AopConfigUtils.forceAutoProxyCreatorToUseClassProxying(registry);
}

为true则调用forceAutoProxyCreatorToUseClassProxying方法,强制基于类来创建代理,从上面代码可以看出,不设置则默认为false

public static void forceAutoProxyCreatorToUseClassProxying(BeanDefinitionRegistry registry) {if (registry.containsBeanDefinition(AUTO_PROXY_CREATOR_BEAN_NAME)) {BeanDefinition definition = registry.getBeanDefinition(AUTO_PROXY_CREATOR_BEAN_NAME);definition.getPropertyValues().add("proxyTargetClass", Boolean.TRUE);}
}

此处可以看到,在bean定义对象中设置了proxyTargetClass属性,后面spring获取bean创建代理类的时候,会判断此属性类决定使用JdkDynamicAopProxy还是ObjenesisCglibAopProxy代理

打开DefaultAopProxyFactory类,查看createAopProxy方法

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()) {return new JdkDynamicAopProxy(config);}return new ObjenesisCglibAopProxy(config);}else {return new JdkDynamicAopProxy(config);}
}

hasNoUserSuppliedProxyInterfaces方法则说明即使你未声明proxy-target-class="true" ,但运行类没有继承接口,spring也会自动使用CGLIB代理。

总结:高版本spring自动根据运行类选择JDK或CGLIB代理,我们无需设置proxy-target-class属性,JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式,一般采用前者,因为前者效率高,  后者不建议使用。

转载于:https://my.oschina.net/u/3434392/blog/2909055

http://www.jmfq.cn/news/4809025.html

相关文章:

  • 课程设计做淘宝网站的目的/网络推广竞价外包
  • 静态网站生成/培训网
  • 网站制作英文版网站/东莞搜索排名提升
  • 兰州做网站企业/网络seo公司
  • 天津公司网站的建设/西安网站关键词优化推荐
  • 简述建设一个商务网站的过程/石家庄网络推广平台
  • logo设计理念简短范文/seo快速推广窍门大公开
  • 在那个网站上做设计赚钱/营销软文范例大全300
  • 荆门网站开发公司/济南网络优化厂家
  • 前端网站做中 英文怎么说/女生做sem专员的工作难吗
  • 软件公司排名100强/武汉seo搜索引擎
  • java调接口做网站/地推网app推广平台
  • 绵阳top唯艺网站建设/网站生成app工具
  • 手机端建站/seo门户网站建设方案
  • 北京好的做网站的公司/成功的软文推广
  • 做购物网站表结构分析/在线科技成都网站推广公司
  • 在日本做网站/域名大全
  • 网站未做安全隐患检测怎么拿shell/奶茶软文案例300字
  • 四川省和城乡建设厅网站/百度点击率排名有效果吗
  • 怎样保存网站资料 做证据/网络营销策划需要包括哪些内容
  • 金乡县住房与城乡建设局网站/企业网络营销方案策划
  • 易购商城网站怎么做啊/2022网站seo
  • 太平洋建设 网站/网络营销环境分析包括哪些内容
  • 公司怎么做网站需要多少钱/手机流畅优化软件
  • 用网站做CAN总线通信好吗/百度推广的几种方式
  • 企业网站系统详细设计/培训方案
  • 济南网站设计公司推荐/数字营销公司排行榜
  • 旅游公司网站建设/网络推广方式方法
  • 颍上县建设局网站/北京网站
  • wordpress默认模版/推推蛙贴吧优化