dubbo源码分析之getAdaptiveExtension

得到spi接口的适配类

核心实现方法是createAdaptiveExtension(),当前对象缓存cachedAdaptiveInstance中没有实例时,调用
-->createAdaptiveExtension()
-->(T) getAdaptiveExtensionClass().newInstance() 得到该类型的适配实例
-->getExtensionClasses(); 这里需要调用得到该类型的所有扩展点,放到缓存cachedClasses中
-->cachedAdaptiveClass如何缓存中存在,直接返回(如何存在,说明该spi的@adaptive注解是在类上的)
--> loadExtensionClasses(); 这是得到所有扩展点的具体实现
-->loadFile();
关于loadfile
目的:通过把配置文件META-INF/dubbo/internal/com.alibaba.dubbo.rpc.Protocol的内容,存储在缓存变量里面。
cachedAdaptiveClass//如果这个class含有adative注解就赋值,例如ExtensionFactory,而例如Protocol在这个环节是没有的。
cachedWrapperClasses//只有当该class无adative注解,并且构造函数包含目标接口(type)类型,
例如protocol里面的spi就只有ProtocolFilterWrapper和ProtocolListenerWrapper能命中
cachedActivates//剩下的类,包含Activate注解
cachedNames//剩下的类就存储在这里。
。。。。。。。。。。。。。。。。
-->createAdaptiveExtensionClass() 创建spi适配类
-->createAdaptiveExtensionClassCode()@ 动态创建适配类
-->injectExtension() 将属性注入到得到的实例中,

部门代码截图:


猜你喜欢

转载自blog.csdn.net/yangxiaobo118/article/details/80717984