主要讲述两点:
1.spring扩展的加载逻辑
2.mock加载的一些逻辑
spring的扩展目录结构:
加载初始化:
目录结构:根据配置的标签,加载指定的class类, 命名规则:基本是名称后面加上Config,有些需要初始化bean的需要实现spring加载bean的接口的,就会实现一个子类,名字变成后面加上bean
先通过DubboBeanDefinitionParser做一些加载bean的操作,对配置的里面的参数(属性)设置到bean中,默认不设置懒加载,
接下去设置ID,名字等
然后对于一些特定的bean做一些增强,相关详细不做讲述
增强完成之后,对指定的config或者bean做操作
下面对ReferenceBean里面初始化做一些了解,主要针对mock的操作
init方法会去校验mock
校验mock的逻辑:
1.有没有配置local参数,配置的时候会去调用ConfigUtils.isDefault()方法,如果是true,就会默认去找配置的id的名字,加上Local,如果找不到就直接抛出throw new IllegalStateException异常。如果配置的不是true或者default就会去找你配置的local的类,反射调用构造方法,构造方法的入参是装饰者的实例(也就是此处运用的是装饰者模式)(好处:容易扩展一个类的功能。动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)
2.看有没有配置stub属性,如果配置,同理,也是看配置的是true还是default还是其他等还是会加上stub来找本地的实现类,剩下的逻辑和local一致
3.有没有配置mock,mock的配置如下
3.1先判断是否是return开头,如果是,就执行处理
3.2如果不是return开头的,就先去找mock的值,是否是true或者default,如果是就类后面加上mock去找此类,不是就认为mock配置就是需要执行的类,然后去执行没有入参的构造方法
下面看下如果是return开头的配置:
这个一目了然,将配置的数据返回,会转成相应的数据格式做返回
到这里结束了mock的检查