Dubbo-spi
2021-08-30 12:55:08 1 举报
源码流程图
作者其他创作
大纲/内容
name为true,获取默认的扩展点
获取当前类型的扩展类加载器
存在wrapperClasses
获取当前对象的set方法,获取set方法的方法名作为name,方法的参数类型作为type
创建扩展点
加载实现类
缓存被Activate注解了的类
获取对应name的扩展点
createExtension(name)
ioc依赖注入
instance
class对象创建实例对象,并缓存
objectFactory = (type == ExtensionFactory.class ? null : ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension());
加载,按行解析对应路径的文件,#分割name跟扩展点实现类路径dir+type
扩展点实现类上标记了Adaptive注解,那这个类就是Adaptive类
解析名字,多个名字
反射调用set方法注入对象。
加载当前接口的所有扩展类
获取cachedDefaultName
将name跟class类对应关系缓存
接口上spi注解的value属性就是默认的name。默认的扩展点实现类的name:cachedDefaultName
放置缓存
injectExtension(instance)
// ExtensionFactory表示扩展类实例工厂,可以利用ExtensionFactory得到某个扩展的对象实例//得到ExtensionFactory接口的adaptive实例-AdaptiveExtensionFactory实例,利用AdaptiveExtensionFactory实例来获取某个类型或名字的实例对象
getExtensionClasses()
如果接口上有spi注解,就获取接口的adaptive类,否则去spring容器中,先byname,再byType,找到注入对象。
cachedInstances.get(name)
通过wrapper类带有这个接口的构造器去实例化wrapper对象。传入新创建的扩展对象。
getDefaultExtension()
没有缓存
aop之后再进行ioc
是否有包括当前扩展类的构造方法,有就是wrapper类。
getExtension(String name)
getExtensionLoader(Class<T> type)
从缓存中获取对应name的class对象
收藏
收藏
0 条评论
下一页