1.通过配置文件初始化。
dubbo的自定义命名空间,后续会通过这个命名空间来找到dubbo标签的解析方法,以及对象初始化。
由于具体的解析需要通过spring来做,转到spring,从DefaultNamespaceHandlerResolver中可以看到新命名空间的初始化代码,namespaceHandle.init()。
namespaceHandle对象可以在dubbo的配置文件中找到(spring创建及注入该对象的过程需另开篇幅记录);
在Dubbo的DubboNamespaceHandler中描述了所有标签,及标签的解析方法(供spring解析使用,这些解析只是先解析所有bean的定义并储存起来)。
看下其中关于service的解析如下。
dubblo实现了spring的FactoryBean接口,用来向spring容器注入自定义对象。
一直往下挖,可以在StubProxyFactoryWrapper中的getProxy方法看到通过反射创建对象。
2.dubbo连接对端服务时机:在ReferenceConfig的createProxy方法中。
先找对对方url
通过refprotocol的refer方法创建netty客户端连接
默认获取共享连接
默认是lazy连接(只有dubbo服务调用时才连接对端)