一、xml配置解析方式:
1、 DubboNamespaceHandler extends NamespaceHandlerSupport 解析所有的dubbo自定义的bean,转换为beandefinition
二、注解解析方式
DI.png
2、consumer(reference)启动的时候构建Proxy实例,在给bean依赖注入的时候,走Dubbo重写的getInjectedObject方法:
image.png
通过 buildProxy:
image.png
构建ReferenceBeanInvocationHandler:
image.png关键在于:
image.png
到了:
image.png
到了:
image.png
最后通过
image.png
创建了InvokerInvocationHandler 代理(InvokerInvocationHandler持有MockClusterInvoker):
image.png
通过ReferenceAnnotationBeanPostProcessor的
image.png
的buildProxy方法,每个接口构建一个Proxy实例(jdkProxy方式newInstance)
3、真正调用的时候,走ReferenceAnnotationBeanPostProcessor 的invoke 方—>InvokerInvocationHandler的invoke方法—>MockClusterInvoker的invoke方法—>AbstractClusterInvoker的invoke(获取LoadBalance方式,然后Invoker<T> invoker = select(loadbalance, invocation, copyinvokers, invoked); 选择被调用的service)—> Result result = invoker.invoke(invocation) —>InvokerWrapper的invoke—>ListenerInvokerWrapper的invoke—>ProtocolFilterWrapper的invoke—>ConsumerContextFilter的invoke
image.png
网友评论