一个springBoot项目,只要添加相关的依赖,无需配置,启动main方法就行,并且可以对全局变量文件application.properties或application.yml对项目进行设置
springBoot还定义了一套接口规范:Spring Boot在启动时,会扫描jar外部引用jar包中的meta-INF/spring. factories文件,将文件中的配置信息加载到spring容器中,并执行定义中的各项操作
@SpringBootApplication@SpringBootApplication是核心注解
可以把@SpringBootApplication看作是:
@SpringBootConfiguration、@EnableAutoConfiguration和@Componetscan这三个注解的集合
@SpringBootConfiguration:允许在上下文中注册额外的bean或者导入其他配置项
@EnableAutoConfiguration:启动SpringBoot的自动配置机制
@Componetscan:扫描被@Compent(@Service、@Controller)注解的bean,注解是会默认扫描启动类所在的包下的所有类,也可以定义不扫描bean
@EableAutoConfiguration注解的源码自动装配的核心是通过AutoConfigurationUmportSelector实现的,查看源码分析:
AutoConfigurationUmportSelector最终实现了importSelector接口,也实现了importSelector接口中的selectimports方法。
selectimport作用:获取所有符合条件的全限定类名,这些类需要被加载到IOC容器中:
自动装配源码执行流程getAutoConfigurationEntry:主要负责加载自动配置类
源码对应如图:
第一步跳到isEnabled方法判断自动装配是否开启,默认true
第二步通过调用SpringFactoriesLoader.loadFactoryName()获取exclude和excludeNama
获取所需要自动装配的所有配置类,读取meta-INF/spring.factories,经过筛选,满足条件的类会被加载
总结SpringBoot通过@EnableAutoConfiguration开启自动配置,通过SpringFactoriesLoader最终加载meta-NIF/spring.factories中的自动配置类实现自动装配,自动装配其实就是通过@Conditional按需求加载的配置类,想要其生效就必须引入相应的spring-boot-start-xxxx依赖



