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

天津商城网站设计公司百度seo课程

天津商城网站设计公司,百度seo课程,建设工程公司组织架构图,网页游戏平台代理加盟一、Dubbo整合Spring启动流程 Dubbo的使用可以不依赖Spring#xff0c;但是生产环境中Dubbo都是整合到Spring中一起使用#xff0c;所以本章就解析Dubbo整合Spring的启动流程 一、传统的xml解析方式 一、Dubbo配置解析流程 在Java 中#xff0c;一切皆对象。在JDK 中使用…一、Dubbo整合Spring启动流程 Dubbo的使用可以不依赖Spring但是生产环境中Dubbo都是整合到Spring中一起使用所以本章就解析Dubbo整合Spring的启动流程 一、传统的xml解析方式 一、Dubbo配置解析流程 在Java 中一切皆对象。在JDK 中使用java.lang.Class 来描述类这个对象。而在Spring 中bean 对象是操作核心。那么Spring 也需要一个东西来描述bean 这个对象它就是BeanDefinition。 dubbo 的配置解析不论是xml 方式的配置还是注解的配置目标都是把配置的属性值提取出来变成dubbo 的组件bean先由BeanDefinition 描述然后委托spring 生成组件bean。 下面以xml 的标签为例列出每种配置对应要解析成为的目标组件bean。 首先dubbo 自定义了spring 标签描述dubbo.xsd。在dubbo-config-spring模块下的src/main/resouce/META-INF 下其次在spring.handlers、spring.schemas 中指定解析类将标签引入spring 中管理。 来到DubboNamespaceHandler中的init()方法引入了很多DubboBeanDefinitionParser类每个类会解析对应的配置DubboBeanDefinitionParser 继承了spring 的BeanDefinitionParser 接口spring 会调用parse 方法来读取每个标签配置将属性值装入对应的BeanDefinition 定义中后续spring会根据此BeanDefinition 定义生成dubbo 的组件bean。 继续看下DubboNamespaceHandler中的parse()方法spring启动过程中同样会调用到这个方法方法中有一行DubboSpringInitializer.initialize(parserContext.getRegistry())方法就是向容器中加入一些基础bean。 我们先看两个比较重要的也就是ReferenceAnnotationBeanPostProcessorDubboDeployApplicationListener其中ReferenceAnnotationBeanPostProcessor是处理Reference注解的而DubboDeployApplicationListener是DubboDeployApplicationListener会监听Spring容器启动完成事件ContextRefreshedEvent一旦接收到这个事件后就会开始Dubbo的启动流程就会执行DefaultModuleDeployer的start()进行服务导出与服务引入。 到此那么dubbo中的一些必要的基本类已经假如到容器中了也就是已经具备了解析处理dubbo.xml的基本条件。 二、Service标签处理 看下解析service标签的DubboBeanDefinitionParserspring启动过程中会执行到parse方法最终将service对应的Class信息设置到beanDefinition中并且调用registerBeanDefinition方法将该beanDefinition注册到BeanDefinition中。 注意到此时的beanClass为ServiceBean该类实现了InitializingBean接口那么最终实例化的时候会调用afterPropertiesSet方法这里会将ServiceBean加入到dubbo的configsCache缓存中后面进行服务暴漏的时候就是从这个缓存中获取的。 三、Reference标签处理 同理reference标签的处理跟service标签一样同样会通过DubboBeanDefinitionParser将他的class信息设置到beanDefinition中此时class信息为referenceBean。这个接口实现了FactoryBean接口那么最终spring会调用他的getObject方法可以看到该方法里面去创建代理对象lazyProxy对象。 referenceBean同时也实现了InitializingBean最终也会调用到afterPropertiesSet()方法这里会将referenceBean添加到缓存中。 四、DubboDeployApplicationListener 当Spring容器启动完成会发布事件ContextRefreshedEventDubboDeployApplicationListener会监听这个事件一旦接收到这个事件后就会开始Dubbo的启动流程就会执行DefaultModuleDeployer的start()进行服务导出服务暴漏与服务引用。 还记得serviceBean初始化的时候执行的afterPropertiesSet方法吗会将ServiceBean加入到dubbo的configsCache缓存中这里会取出来挨个进行服务导出。 同时也会从configManager中获取references进行服务的引用也就是生成具体的远程调用代理类最终会调用到referenceConfig中的init方法ref就是生成的代理对象也就是实际的业务执行者。 二、注解方式 一、EnableDubbo 服务端代码如下需要在配置类上加上EnableDubbo注解 EnableDubbo注解上面有一个注解DubboComponentScan点进去这个注解发现他引入了这个DubboComponentScanRegistrar该类实现了ImportBeanDefinitionRegistrarspring启动过成功会调用registerBeanDefinitions方法 这里有三个比较关键的方法 1、DubboSpringInitializer.initialize(registry); 这一步在xml解析的过程中已经解释过引入了ReferenceAnnotationBeanPostProcessorDubboDeployApplicationListener两个核心类 2、SetString packagesToScan getPackagesToScan(importingClassMetadata); 这一步是获取DubboComponentScan上面的包路径并传递给ServiceAnnotationPostProcessor这个类会去扫描这个包下的带有DubboService注解的类 3、将ServiceAnnotationPostProcessor注入到spring容器中后续进行DubboService注解解析 二、ServiceAnnotationPostProcessor 这个类实现了BeanDefinitionRegistryPostProcessor最终Spring会调用到postProcessBeanDefinitionRegistry方法中而scanServiceBeans方法就是将包路径下带有DubboService的类解析为beanDefinition然后加入到spring容器中。 最终还是会通过serviceBean的afterPropertiesSet方法将ServiceBean加入到dubbo的configsCache缓存中后面进行服务暴漏的时候就是从这个缓存中获取的 三、ReferenceAnnotationBeanPostProcessor spring执行过程中会调用postProcessMergedBeanDefinition方法收集类中带有DubboReference注解的属性并最终调用postProcessPropertyValues将类上的属性注入到类中。 referenceBean也实现了InitializingBean最终也会调用到afterPropertiesSet()方法这里会将 referenceBean添加到缓存中。 四、DubboDeployApplicationListener 当Spring容器启动完成会发布事件ContextRefreshedEventDubboDeployApplicationListener会监听这个事件一旦接收到这个事件后就会开始Dubbo的启动流程就会执行DefaultModuleDeployer的start()进行服务导出服务暴漏与服务引入。 还记得serviceBean初始化的时候执行的afterPropertiesSet方法吗会将ServiceBean加入到dubbo的configsCache缓存中这里会取出来挨个进行服务导出。 在这里会从configManager中获取references进行服务的引用也就是生成具体的远程调用代理类最终会调用到referenceConfig中的init方法ref就是生成的代理对象也就是实际的业务执行者。 三、服务调用 当进行服务调用的时候此时的demoService其实就是ReferenceBean.getObject()方法返回的lazyProxy对象执行方法调用时会通过createObject然后getCallProxy获取到执行业务的对象。 最终会来到referenceConfig.get()方法由于ref属性已经在dubbo启动的时候通过referServices初始化完成所以这里已经不是null了最终调用该ref执行业务逻辑的调用。 至此、Dubbo整合spring的大致启动流程结束下个章节解析Dubbo的服务暴漏与注册。
http://www.hkea.cn/news/14495554/

相关文章:

  • 网站新闻标题标题怎样进行优化动漫设计中专学校
  • 英文网站注意事项if设计大赛官网
  • 3分钟搞定网站seo优化外链建设怎么看网站开发者页面
  • 郑州网站建设品牌wordpress群发
  • 网站建设都包括哪些方面中国互联网服务平台
  • 做网站需要什么人电信专线可以做网站吗
  • 科威网络做网站怎么样如何加快百度收录网站
  • 菏泽外贸网站建设网站后台建设教程
  • 银川网站建设公司哪家不错做app公司
  • 重庆网站建设百度推广石家庄网站设计公司
  • 潍坊网站定制公司宝安中心网站建设
  • 台式机网站建设旅游网络推广怎么做
  • 亚马逊网站建设与维护方法分析邢台信息港官网
  • 杨思网站建设公司2016个人做淘宝客网站
  • 做网站数据库设计广东vs北控直播
  • 商城网站设计公司排名如何上传网站程序
  • dede 企业网站模板宁波外贸网站推广优化
  • 网站 售前wordpress 安装包
  • wap网站开发招聘网页设计的网站配色方案
  • 旅行社建网站上海有哪些比较好的室内设计公司
  • 专业的佛山网站建设公司香河县住房和城乡建设部网站
  • 容桂品牌网站建设学的网络工程
  • 甘洛网站建设北京城乡住房建设官方网站
  • 沈阳教做网站做动画视频的网站
  • 长沙网站建设哪里好百度搜索引擎下载免费
  • 中山建站公司电商系统开发公司
  • 河南省城市建设网站怎么做网络游戏
  • 做网站代理商局域网
  • 宣城网站建设电话网站建设经验交流材料
  • 佛山专业网站建设的公司四川绵阳网站建设