SpringBoot自动配置原理分析
Spring Boot
Starter
开箱即用的组件
自动装配的功能
Spring Framework > IOC
applicationContext.xml
HelloController hc = (HelloController)context.getbean("name")
Bean 的装配
--》
配置文件过多》难以维护
spring 2.5 注解的支持
@Services / @Repository / @Controller / ...
<context:componet-scan
xml文件依然存在
》
spring 3.0 之后 》 javaconfig 》 无配置化
@Configuration
手动的方式把Bean装配到IOC容器
Spring里面本身就提供了这样的支持
Enable* 自动配置
自动将Bean装配到IOC容器
EnableAutoConfiguration 自动装配
自动装配依赖于spring的javaconfig
Spring中的Javaconfig
xml
context:component-scan/
JavaConfig
@ComponetScan 》 扫描@Service @Repository …… 注解修饰的类,装配到IOC容器
@import
Spring IOC 容器,如何实现bean的装配
@Enable
ImportSelector
导入 选择 》 选择性导入 》 选择性导入Bean对象
导入规范
-
引入Starter组件,就能实现相关的Bean的自动装配。
-
(约定优于配置)xxx-spring-boot-starter(非官方) / spring-boot-starter-xxx)(官方提供)
-
Starter可以自己构建 》 也是为了实现自动装配。
-
或者说Starter中必须要基于某种标准定义一个文件或者类,才能够使得Spring Boot 自动装配扫描到对应的文件或者类来实现对应的Starter组件中的Bean的自动装配。
SPI机制 JDK
java.jdbc.Driver 》 数据库驱动类(JDK提供的标准)
SpringFactoriesLoader
spring里面提供的SPI
Dubbo
Spring Boot 官方和个人组织的Starter的区别
@ConditionalOnClass
官方提供的Starter相当于一个开关,只需要这个开关满足条件就就会触发装配