手写 xxx-spring-boot-starter (一.自动装载原理)

 

  1. 版本spring boot 2.1.0.RELEASE

  2. spring-boot启动

    spring boot 的启动时基于加@SpringBootApplication的主类启动的

  3. 我们看一下@SpringBootApplication的具体信息

    我们看一这个注解的主要的注解

    @Target    ElementType.TYPE注解的作用目标 类/接口/枚举/注解

    @Retention  RetentionPolicy.RUNTIME   会保留到class中,并在JVM加载class文件后仍然存在

    @EnableAutoConfiguration    开启自动配置(spring boot 自动配置的关键)

  4. @EnableAutoConfiguration   

    @Import 注入了AutoConfigurationImportSelector,并通过这个类去选择注入那些组件

    @AutoConfigurationPackage   自动配置包

  5. AutoConfigurationImportSelector是如何导入组件的呢?

     

    在100行获取了自动配置项 AutoConfigurationEntry 调用的是getAutoConfigurationEntry方法

    我们看一这个方法

     

    返回的数据是new出来的,配置项是第一个构造参数,参数来源于119行的String集合 从getCandidateConfigurations方法获取

     

     

    进一步进入loadFactoryNames

     

     

    进入LoadSpringFactories

     

     

    133行获取工厂源 FACTORIES_RESOURCE_LOCATION 

     

    public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";

     

    哦,原来在这里

    这是扫描了spring.factories

     

     

    136行开始解析读取到的东西

    解释一下为什么使用LinkedMultiValueMap

    LinkedMultiValueMap的特性是一个key可以对应多个value

    LinkedMultiValueMap.add("key","value1");

    LinkedMultiValueMap.add("key","value2");

    LinkedMultiValueMap.add("key","value3");

    key[value1,value2,value3]

    这时我们已经找到我们需要加载的组件了

    那我们如何加载呢?

  6. 我们以DataSourceAutoConfiguration为例

     

    @Configuration  装载标识

    @ConditionalOnClass 实例化这个bean

    @EnableConfigurationProperties 开启配置文件的属性装载读取项目的application.yml进行装载

    @Import  将依赖的Bean导入当前容器

    这样一个数据源就装载完毕了,我们就有了DataSource

     

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值