一、服务引用大致流程
之前文章我们有介绍过:Provider将自己的服务暴露出来,注册到注册中心,而Consumer通过注册中心获取Provider信息。
之前我们提到过一个名词Invoker,它是Dubbo中的一个可执行体,所有调用都要向Invoker靠拢,所以需要首先生成一个Invoker。因为框架需要有外部接口实现无感调用,所依需要生成一个代理类去包装、屏蔽底层细节。
二、服务引入时机
服务的引入和服务的暴露一样,也是通过Spring自定义标签机制解析生成对应的Bean,ProviderService对应解析的是ServiceBean而ConsumerReference对应的是ReferenceBean。
前面我们分析过,在Spring容器刷新完成后开始暴露,而引入时机有两种,一种是饿汉式,另一种式懒汉式。
饿汉式通过实现Spring的InitializingBean接口中的afterPropertiesSet方法,容器通过调用ReferenceBean的afterPropertiesSet方法时引入服务。
懒汉式是只有当这个服务被注入到其他类中时启动引入流程,也就是说用到了才会开始服务引入。
默认情况下,Dubbo使用懒汉式引入服务,