motan系列2——SPI机制

motan的SPI机制

  motan整个项目由SPI机制贯穿起来。主要理解几个概念:

    两个注解:@Spi主要于可扩展的接口,类似于模板模式,定义一个标准,可以自定义扩展;@SpiMeta作用于扩展类,可以定义名称,实例化方式(单例和原型)

    另外有一个核心实现类 ExtensionLoader<T>,这个类的作用就是获取扩展类示例的。看下这个类的几个核心属性:

  //管理的是由 @Spi 注解标注的接口与其 ExtensionLoader 的映射,作为所有SPI的全局管理器。
  private
static ConcurrentMap<Class<?>, ExtensionLoader<?>> extensionLoaders = new ConcurrentHashMap<Class<?>, ExtensionLoader<?>>();
   //维护了当前 ExtensionLoader 中的单例扩展。
  private ConcurrentMap<String, T> singletonInstances = null;
  //维护了当前 ExtensionLoader 所有扩展实例的Class对象,用于创建多例(通过class.newInstance创建)。
private ConcurrentMap<String, Class<T>> extensionClasses = null;   //维护了当前 @Spi 注解标注的接口的 class 对象。 private Class<T> type; private volatile boolean init = false; // spi path prefix private static final String PREFIX = "META-INF/services/"; private ClassLoader classLoader;

  Motan系列2:SPI插件扩展机制

 

posted @ 2021-12-22 18:11  jingyi_up  阅读(90)  评论(0编辑  收藏  举报