dubbo对spring扩展自定义标签的加载

主要讲述两点:

1.spring扩展的加载逻辑

2.mock加载的一些逻辑

spring的扩展目录结构:

dubbo对spring扩展自定义标签的加载_第1张图片

加载初始化:


dubbo对spring扩展自定义标签的加载_第2张图片

目录结构:根据配置的标签,加载指定的class类, 命名规则:基本是名称后面加上Config,有些需要初始化bean的需要实现spring加载bean的接口的,就会实现一个子类,名字变成后面加上bean

先通过DubboBeanDefinitionParser做一些加载bean的操作,对配置的里面的参数(属性)设置到bean中,默认不设置懒加载,

dubbo对spring扩展自定义标签的加载_第3张图片

接下去设置ID,名字等


然后对于一些特定的bean做一些增强,相关详细不做讲述

dubbo对spring扩展自定义标签的加载_第4张图片

增强完成之后,对指定的config或者bean做操作

下面对ReferenceBean里面初始化做一些了解,主要针对mock的操作

dubbo对spring扩展自定义标签的加载_第5张图片

init方法会去校验mock


dubbo对spring扩展自定义标签的加载_第6张图片

校验mock的逻辑:


dubbo对spring扩展自定义标签的加载_第7张图片

1.有没有配置local参数,配置的时候会去调用ConfigUtils.isDefault()方法,如果是true,就会默认去找配置的id的名字,加上Local,如果找不到就直接抛出throw new IllegalStateException异常。如果配置的不是true或者default就会去找你配置的local的类,反射调用构造方法,构造方法的入参是装饰者的实例(也就是此处运用的是装饰者模式)(好处:容易扩展一个类的功能。动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)

判断配置的是否是true或者default.如果是就返回true


配置的reference的ID


dubbo对spring扩展自定义标签的加载_第8张图片
装饰者模式,扩展实现类


2.看有没有配置stub属性,如果配置,同理,也是看配置的是true还是default还是其他等还是会加上stub来找本地的实现类,剩下的逻辑和local一致

3.有没有配置mock,mock的配置如下

    3.1先判断是否是return开头,如果是,就执行处理

    3.2如果不是return开头的,就先去找mock的值,是否是true或者default,如果是就类后面加上mock去找此类,不是就认为mock配置就是需要执行的类,然后去执行没有入参的构造方法


dubbo对spring扩展自定义标签的加载_第9张图片
看mock配置是否是return开头


下面看下如果是return开头的配置:


dubbo对spring扩展自定义标签的加载_第10张图片
具体配置

这个一目了然,将配置的数据返回,会转成相应的数据格式做返回

到这里结束了mock的检查

你可能感兴趣的:(dubbo对spring扩展自定义标签的加载)