基础知识

来源:互联网 发布:云数据服务 编辑:程序博客网 时间: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

原创粉丝点击