SpringBoot框架启动流程和@SpringBootApplication注解

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加载器进行一系列的容器创建的过程。

你可能感兴趣的:(SpringBoot框架启动流程和@SpringBootApplication注解)