SpringBoot 2.x 实战仿B站高性能后端项目内附资料

627 阅读1分钟

download: SpringBoot 2.x 实战仿B站高性能后端项目

Dubbo源码篇---Wrapper详解

Wrapper

wrapper为Dubbo SPI扩展类的包装对象,其实际作用起到了代理的作用。当Dubbo在解析SPI配置时,如果有相关的包装类,将被缓存在cachedWrapperClasses中,在执行getExtension时,如果需要包装类,将返回该扩展类的包装类。

Wrapper注解

Dubbo提供了Wrapper注解,当包装类上无此注解作用时,表示该扩展的所有扩展类都将会被该Wrapper类代理;否则需要在该注解上根据该扩展的扩展类名称,通过matches指定需要代理的扩展类,或通过mismatches指定不需要代理的扩展类。

源码分析

Wrapper包装类解析
private void loadClass(Map<String, Class<?>> extensionClasses, java.net.URL resourceURL, Class<?> clazz, String name,
                       boolean overridden) throws NoSuchMethodException {
    // 忽略这里的无关代码
  
    // 检测目标类上是否有@Adaptive注解
    if (clazz.isAnnotationPresent(Adaptive.class)) {
     // 忽略这里的无关代码
     // 检测类是否是wrapper类型
    } else if (isWrapperClass(clazz)) {
        // 设置缓存
        cacheWrapperClass(clazz);
    // 到了这里表示这是一个普通的扩展类
    } else {
        //忽略这里的无关代码
    }
}