dubbo的初始化
DubboNameSpaceHandler的源码
当dubbo启动的时候,dubbo来解析标签的时候,dubbo.xml配置的每个标签都来调用这个DubboBeanDefinitionParser,
例如当读取到dubbo:application标签时,他就会读到dubbo:application标签的所有属性,然后set到组装出来的实体bean中(ApplicationConfig),最终这个实体bean会放入到spring的ioc容器里面
duboo容器的初始化,主要就是中转对象和代理对象的生命周期的研究
实例演示dubbo初始化过程(ServiceBean)
进入DubboNameSpaceHandler->
进入ServiceBean->找到afterPropertiesSet方法,服务暴露
跟进代码点击export,进入方法export->
serviceBean标签的属性配置详细
<dubbo:service path=“com.ws.service.IUserService” ref=“com.ws.service.impl.UserService@495fac5f” exported=“false” unexported=“false” interface=“com.ws.service.IUserService” id=“com.ws.service.IUserService” />
点击doExport,继续跟进代码,跟进doExport方法里面,第307行看到->
继续跟进到doExportUrls方法中,这里加载协议,通过dubbo:protocol来看配置了几种协议,并且遍历协议,对每个协议的服务进行服务暴露操作
默认如果暴露目标不配置协议,则会实现duboo.protocol配置的dubbo/rmi/hession协议的服务暴露操作
若目标服务配置了协议,则只会实现配置的协议这一个协议进行服务暴露实现
点击doExportUrlsFor1Protocol,协议创建中转对象->
调试面板如下
继续调试,当前是UserService使用dubbo协议,直接走DubboProtocol实现->进入DubboProtocol
跟进openServer方法里面
QuestionService使用的rmi这里循环到这里时,使用rmi类的doExport
点击export进入AbstractProxyProtocol->
点击doExport进入RmiProtocol,这里就是中转对象了
dubbo的服务方和消费方根据接口全路径url来归类,消费方可以根据url来确定服务方是否提供了服务