命名规则
Spring Boot推荐我们自己创建的starter千万不要以spring-boot开始命名,因为以spring-boot开始命名的一般都是人家官方的
*-spring-boot-starter一般都是第三方为我们提供的简化开发的场景启动器。
Spring Boot的自动装配原理
@ImportResource注解允许我们依旧还能使用Spring以前的XML配置文件这种方式,因为它可以导入该Spring配置文件,让其生效
最重要的还是@SpringBootApplication这个核心注解,我之前也说过了,该注解其实就相当于
@SpringBootConfiguration、
@EnableAutoConfiguration
@ComponentScan("com.meimeixia.boot")这三个注解。所以,在这里呢,我就将@SpringBootApplication拆分
@SpringBootConfiguration的功能
-
加载的时候,会想加载我们写的类,再去加载配置类
-
我们不妨点进@SpringBootConfiguration注解的源码里面去看一看,如下图所示,那这个注解到底是来干嘛的呢?
-
发现该注解上面又标注了一个@Configuration注解,说明当前注解就是一个配置类。也就是说,咱们当前的主程序类其实就是Spring Boot里面的一个配置类,而且它还是一个核心配置类哟!
@ComponentScan的功能
@ComponentScan指定需要扫描package的路径,@SpringBootApplication也提供了相应属性,指定需要扫描哪些package或不扫描哪些package
@EnableAutoConfiguration的功能
带着这个疑问不妨点进@EnableAutoConfiguration注解的源码里面去看一看,
还有其他的两个注解,即@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})
@AutoConfigurationPackage==》加载启动类包下的所有BD
用于扫描启动类下所有的 bean,注册到 BDM中
@Import(AutoConfigurationImportSelector.class)详解
AutoConfigurationImportSelector 类实现了 ImportSelector接口,也就实现了这个接口中的 selectImports方法,该方法主要用于获取所有符合条件的类的全限定类名,这些类需要被加载到 IoC 容器中。
- 底层会去寻找
META-INF/spring.factories, - loadSpringFactories方法是从
META-INF/spring.factories资源文件中来加载得到所有组件的。也就是说,该方法会默认扫描我们当前系统下所有位于META-INF目录下的spring.factories资源文件。
虽然Spring Boot应用一启动的时候会一股脑的加载所有场景下的自动配置,但是最终还是得根据条件装配规则来按需开启自动配置项。 这都得益于Spring Boot底层的条件装配注解(即@ConditionalOnXxx),例如@ConditionalOnMissingBean,也就是说好些场景下的自动配置是不能完全开启的。