一、springboot是什么?
springboot本质上就是spring,不过他并不像spring那样需要繁琐的配置,简化了开发流程,但是他并不提供spring的核心功能,他只是spring的一个脚手架。
通过引入依赖(Starter),从spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给spring容器来帮我们进行管理,这就是springboot的自动装配。
二、spring.factories文件的意义何在
在我们主程序入口,关于@SpringBootApplication这个注解:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
@ComponentScan
注解指扫描@SpringBootApplication
注解的入口程序类所在的basepackage下的所有带有@Component
注解的bean,从而注入到容器当中。
但是如果是加入maven坐标依赖的jar包,就是项目根目录以外的Bean。@EnableAutoConfiguration
注解来注册项目包外的bean。而spring.factories文件,则是用来记录项目包外需要注册的bean类名。
三、springboot自动装配的流程
springboot启动的时候会创建一个**Application
对象,在对象的构造方法里面会进行一些参数的初始化工作,最主要的是判断当前应用程序的类型以及设置初始化器以及监听器,并在这个过程中会加载spring.factories文件,当某个AutoConfiguration类满足其注解@Conditional
指定的生效条(Starters提供的依赖、配置或Spring容器中是否存在某个Bean等)时,实例化该AutoConfiguration类中定义的Bean,并注入Spring容器,就可以完成依赖框架的自动配置。