(Java面试常问)springboot自动装配
概述
springboot中启动类上的注解@SpringBootApplication注解,该注解主要由三部分组成。 @SpringBootConfigruation 标注在某个类上,表示这是一个springboot的配置类。 @ComponentScan扫描包,相当于在spring.xml 配置中context:comonent-scan 但是并没有指定basepackage,如果没有,指定spring底层会自动扫描当前配置类所有在的包 @EnableAutoConfiguration注解实现,很明显该注解就是实现自动装配的。该注解里的@Import注解,可以实现导入bean,之后通过DefferedImportSelector(延迟加载,分组)该类批量导入bean。
springboot在启动时会先创建SpringApplication对象,该对象初始化时即会加载整个应用的spring.factories文件,然后将文件的内容放到cache中,方便后续获取。 加载成功之后会进行一个判断,如果该类在类路径上存在,则利用反射的机制实例化该bean。之后会进行过滤,根据我们pom导入的依赖来确定哪些是我们需要的bean,会将其加载到容器中。 (spring.factories文件主要是我们在引入第三方依赖的jar包带入的配置文件。文件格式为key-value格式。文件内容即为我们需要装配的class类的全路径类名。)
总结:所以spring boot在整个的启动过程中,其实就是在类路径的META-INF/spring.factories 文件中找到EnableAutoConfiguration对应的所有的自动配置类,然后进行一定程度的过滤,之后将剩余的bean加载到spring容器中。
|