前言
在开发中,我们定义了接口、实现类,然后在配置文件(XML)中用 <dubbo:service >标签就可以把这个接口暴露出去,本文就介绍一下 Dubbo 的服务暴露过程。
服务暴露流程
先看下官方文档中给出的实体转化图,一个服务暴露必须经过的是从提供服务的实际类 ref -> Invoker -> exporter。大致流程如下:
解析配置文件,发起服务暴露
解析配置文件的自定义标签<dubbo:service > ,在 ServiceBean 初始化的时候会触发 Bean 初始化事件,开始进行服务暴露;
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />
ProxyFactory 动态代理实现类,返回代理对象 invoker
// ServiceConfig ProxyFactory创建代理类,获取invoker
Invoker<?> invoker = proxyFactory.getInvoker()
// JavassistProxyFactory.getInvoker() 动态代理创建代理类
public <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) {
final Wrapper wrapper = Wrapper.getWrapper(proxy.getClass().getName().indexOf('$') < 0 ? proxy.getClass() : type);
return new AbstractProxyInvoker<T>(proxy, type, url) {
protected Object doInvoke(T proxy, String methodName,
Class<?>[] parameterTypes,<