1.SpringBoot启动类
1.1 @SpringBootApplication注解主要由三个注解组成 @ComponentScan @SpringBootConfiguration @EnableAutoConfiguration
@ComponentScan
此注解用来扫描指定的包下的被Spring框架的注解所修饰的类(@RestController,@Controller,@Service,@Repository,@Component),最终生成Ioc容器中的bean
可以通过设置@ComponentScan(basePackages = {},includeFilters={},excludeFilters={})来设置扫描的包的路径,以及需要扫描的包路径和排除不需要扫描的路径
@SpringBootConfiguration
该注解和@Configuration注解的功能是一样的,标注当前类是个配置类
并且会将当前类下的以@Bean修饰的方法加载到Spring容器中,实例名就是方法名
@EnableAutoConfiguration
此注解的作用是从classpath路径下搜索所有的META-INF/spring.factories配置文件,然后将其中key为org.springframework.boot.autoconfigure.EnableAutoConfiguration的value加载到spring容器中。
@EnableAutoConfiguration 注解是由 @Import + @AutoConfigurationPackage两个注解配合使用
@AutoConfigurationPackage:主要作用的自动配置包
@Import:该注解是Spring的底层注解,主要作用是给容器导入组件。导入的组件由AutoConfigurationPackages.Registrar.class 将主配置类(@SpringBootApplication标注的类)的所在包以及下面所有子包里面的所有组件扫描到Spring容器。
@Import中的参数AutoConfigurationImportSelector的作用是导入哪些组件的选择器。将所需要导入的组件以全类名的方式返回数组,这些组件就会被添加到容器中。
从上面的代码中可以看到自动配置加载过程的步骤
1.判断是否开启自动配置,若没有开启,返回空数组
2.从META-INF/spring-autoconfigure-metadata.propertie文件中载入属性配置
3.去掉重复的配置和不包含的配置
4.返回配置信息的数组
总结:
1.springboot应用启动
2.@SpringBootApplication注解生效
3.@EnableAutoConfiguration起作用
4.@AutoConfigurationPackage:这个组合注解主要是将@Import({Registrar.class})这个类加载到spring容器中。而Registrar这个类的主要作用是扫描主配置类所在的包以及子包,将相应的组件导入到springboot管理的容器中
5.@Import(AutoConfigurationImportSelector.class):将AutoConfigurationImportSelector这个类导入到容器中,它的作用是通过selectImports方法,将配置类信息交给SpringFactory加载器进行一系列的容器创建的过程。