dubbo源码解析(四) dubbo spi 生成指定类

上一节分析了ExtensionLoader.getExtensionLoader(Class<T> type).getAdaptiveExtension()源码,

本节分析 ExtensionLoader.getExtensionLoader(Class<T> type).getExtension(String name)的源码。

dubbo源码解析(四) dubbo spi 生成指定类

这是上节生成的动态类Protocol$Adpative,该类的export方法实际是调用extension的export方法,所以生成的动态类是一个动态代理类,这个类是根据传入的参数动态生成的。

下面分析下  ExtensionLoader.getExtensionLoader(Protocol.class)的getExtension(extName)的源码。

dubbo源码解析(四) dubbo spi 生成指定类


dubbo源码解析(四) dubbo spi 生成指定类

下面进入injectExtension(instance)这个方法,该方法运用了ioc的思想。

dubbo源码解析(四) dubbo spi 生成指定类

执行完injectExtension(instance)这个方法后进入

injectExtension((T) wrapperClass.getConstructor(type).newInstance(instance))这个方法

dubbo源码解析(四) dubbo spi 生成指定类

该方法的作用是获取包装类并将目标类作为构造参数传入生成一个装饰类。该方法运用了aop的思想。

通过以上步骤就生成了指定类