springboot基本是当前市面web开发绕不过的一个框架,由于其快捷少配置使用方便,扩展性强的特性,深受大家喜爱,本文浅浅分析一下springboot项目启动时启动类头上的 @SpringBootApplication 注解做了什么
1. 注解构成和主要作用
1. @SpringBootConfiguration 表示被修饰类是个配置类,虽然是个复合注解,但是点进去看也就是一个配置类
2. @EnableAutoConfiguration 自动配置类的核心,主要由两个注解组成,@Import与@AutoConfigurationPackage,import注解是自动配置的核心机制,AutoConfigurationPackage表示当前类所在包报名是自动配置的包
3. @ComponentScan 代表组件扫描范围的范围,过滤组件等,本文不做介绍
2. 重点注解和重点类
2.1@Import(AutoConfigurationImportSelector.class)
参考:www.cnblogs.com/qdhxhz/p/16…
注解作用:和配置类中的@Bean作用相似,都是向容器中注入bean,但是更加灵活
括号中的类可以是个具体的类的集合(表示直接引入这些类,这个和@Bean差不多,不是这个注解的重点),也可以是实现ImportSelector接口的类(AutoConfigurationImportSelector.class就是这种,可以自定义导入包的逻辑,并做些自定义过滤),也可以是实现ImportBeanDefinitionRegistrar接口的类
2.2 AutoConfigurationImportSelector
实现了ImportSelector 接口,准确来说实现了DeferredImportSelector接口,DeferredImportSelector接口和ImportSelector区别在于实现DeferredImportSelector接口的类,执行的时机较晚,所以叫Deferred
ImportSelector中selectImports方法要求返回一个全类名数组,给到@Import 注解,执行bean的注册。
AutoConfigurationImportSelector中通过selectImports方法调用了 与spring扩展机制有关的SpringFactoriesLoader.loadFactoryNames 方法,对所有jar包中的spring.factories中属性为EnableAutoConfiguration的值进行解析,在该文件中其值通常为需要导入的配置类全类名,spring根据其返回的全类名数组 对配置类进行导入,再对配置类中指定的bean进行导入