SpringBoot自动装配源码阅读

260 阅读1分钟

自动装配

1.程序执行时,会解析@SpringBootApplication这个注解

image-20210410200635572

2.点进注解

image-20210410200811269

4.点进@EnableAutoConfiguration

image-20210410201755322

5.点进AutoConfigurationImportSelector

表面意思,挑选一些和自动装配相关的类

image-20210410202147079

6.往下翻

image-20210410202352162

7.点进this.getCandidateConfigurations(annotationMetadata, attributes);

看看去哪里拿的

image-20210410202636470

image-20210410205043981传进来的就是

image-20210410205119873

image-20210410205241430

8.点进loadFactoryNames

image-20210410203101396

image-20210410203700719

9.回到第6步

image-20210410203353779

总结:Spring会自动扫所有类路径下的META-INF/spring.factories这个文件,把这些类都加载到缓存里面

思考

例如,jdbc为什么能自动装配

1.存在于spring.factories下的key为 org.springframework.boot.autoconfigure.EnableAutoConfiguration 下

image-20210410205628517

image-20210410210229329

3.仔细研读一下上面这个类

image-20210410210507361

image-20210410210905830

简单总结:

自己写自动装配怎么写

在classpath下建一个META-INFO/spring.factories 学者人家的key和value,value是你想注入的类

写个Properties类,放一些配置信息

在像注入的类里注入Properties类

就好了

人家的自带名单

image-20210410211503296

自带的名单里没有mybatis

我们先引入mybatis

image-20210410211814789配置信息类

image-20210410212234959

自动装配类

image-20210410212358770

自动装配简单总结

  1. Spring在调用run方法时,会把类路径下的META-INFO下的spring.factories的值全部拿到,放入缓存
  2. 通过EnableAutoConfiguration这个注解会拿到缓存里的数据并进行过滤,留下key为EnableAutoConfiguration的对应的许多value值
  3. 会把这些value对应的所有的类加载到容器,实现自动装配