基础知识
来源:互联网 发布:云数据服务 编辑:程序博客网 时间:2024/06/09 14:10
org.springframework.beans.factory.DisposableBean:bean销毁后做一些处理,实现其destroy方法
import org.springframework.beans.factory.InitializingBean:实例化bean之前做一些处理,实现其afterPropertiesSet方法
BeanPostProcessor后置处理器接口对受管Bean在初始化之前和初始化之后进行预处理
程序猿成长之路少不了要学习和分析源码的。最近难得能静得下心来,就针对dubbox为目标开始进行源码分析。
【服务提供方】
步骤 调用顺序 备注
容器启动
com.alibaba.dubbo.container.Main.main(args);
dubbo.properties -> dubbo.container -> container.start()
container -> spring, log4j, jetty…
[dubbo-container-spring] SpringContainer.java -> [服务提供方]classpath*:META-INF/spring/*.xml -> dubbo.xsd
spring的 ApplicationContext介绍
bean初始化
等自定义标签 -> [dubbo-config-spring] DubboNamespaceHandler.java
-> new DubboBeanDefinitionParser(ServiceBean.class, true)
spring对bean的初始化操作
[dubbo-config-spring] ServiceBean.java -> afterPropertiesSet()
-> setProvider(), setApplication(), setModule(), setRegistries, setMonitor(), setProtocols, setPath() -> export()
自定义标签的解析和初始化
连接注册中心
ServiceBean.export() -> ServiceConfig.java -> doExportUrlsFor1Protocol() -> 暴露协议protocol.export()
protocol=ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension()—Protocol$Adaptive.java
-> ExtensionLoader.loadExtensionClasses() -> loadFile()
-> META-INF/dubbo/internal/,META-INF/dubbo/,META-INF/services/
-> [举例dubbo-rpc-api] 配置文件com.alibaba.dubbo.rpc.Protocol
-> filter,listener,mock -> 各类的export()
protocol.export()调用链 -> [dubbo-registry-api] RegistryProtocol.export()
-> getRegistry()—(ZookeeperRegistry.java -> 扩展的ZookeeperClient)
-> registry.subscribe()加入监听列表
注册到注册中心,
并加入监听列表监听注册中心的消息通知。
启动协议服务器 protocol.export()调用链 -> [dubbo-rpc-rest] RestProtocol.export()
-> doExport() -> server.start(), server.deploy() 根据相应协议启动相应服务器
【服务使用方】
步骤 调用顺序 备注
容器启动 参考服务提供方 同provider
bean初始化
等自定义标签 -> [dubbo-config-spring] DubboNamespaceHandler.java
-> new DubboBeanDefinitionParser(ReferenceBean.class, false)
同provider
连接注册中心
ReferenceBean.java -> afterPropertiesSet() -> ReferenceConfig.init() -> createProxy() -> refprotocol.refer()
refprotocol=ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension()—Protocol$Adaptive.java
-> ExtensionLoader.loadExtensionClasses() -> loadFile()
-> META-INF/dubbo/internal/,META-INF/dubbo/,META-INF/services/
-> [举例dubbo-rpc-api] com.alibaba.dubbo.rpc.Protocol -> filter,listener,mock -> 各类的refer()
protocol.refer()调用链 -> [dubbo-registry-api] RegistryProtocol.refer()
-> getRegistry()—(ZookeeperRegistry.java -> 扩展的ZookeeperClient) -> doRefer()
-> RegistryDirectory.subscribe() -> registry.subscribe()
同provider
服务接口初始化
ReferenceConfig.init() -> createProxy()
-> AbstractProxyFactory.getProxy() -> JavassistProxyFactory.getProxy()
service接口在实际运行时是 com.alibaba.dubbo.common.bytecode.Proxy 类的实例
同provider
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- 基础知识
- jacob操作word书签失败
- 使用oracle存储过程发邮件
- 【南阳oj】1316
- 线程的同步与互斥
- VS 插件开发 总目录
- 基础知识
- DTcms5(五)
- Idea安装Python插件并配置python SDK
- NOIP2011 洛谷 P1315 观光公交
- STM32 IO口输入输出模式的简洁见解
- Tcp三次握手,四次挥手
- RankNet,LambdaRank,LambdaMart
- 解析各大电子商务网站订单号的生成方式
- 评价指标——P,AP,MAP