spi
2020-12-11 10:18:23 0 举报
spi
作者其他创作
大纲/内容
ExtensionLoader extensionLoader = ExtensionLoader.getExtensionLoader(Type.class);
判断是否为接口判断是否为@SPI标注的扩展点
扩展点自动注入ExtensionLoader#injectExtension
1.先去EXTENSION_LOADERS缓存中获取
// 没有被标注,则以驼峰命名法获取扩展点别名// 如果扩展点实现类上被标注了@Extension注解,则以@Extension注解的value值为扩展点别名
ExtensionLoader#loadClass
存在
cachedInstances.get(name);如果缓存为null
以等号分割line获得扩展点别名和扩展点实现类Class的全限定名
new ExtensionLoader<T>(type)
普通扩展点
扫描并收集所有扩展点的Class文件ExtensionLoader#loadExtensionClasses
通过反射创建实例
Duubo中一般会直接使用AdaptiveExtensionFactory
getExtensionClasses().get(name)
如果扩展点别名为空则从别的地方获取别名ExtensionLoader#findAnnotationName
cachedClasses.get()如果缓存为null
private ExtensionLoader(Class<?> type) { this.type = type; objectFactory = (type == ExtensionFactory.class ? null : ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension()); }
ExtensionLoader#loadResource
不存在
getExtensionClasses().get(name)扫描并收集所有扩展点的Class文件
返回
createExtension
ExtensionLoader#loadDirectory
0 条评论
下一页