1.SpringBootApplication中有一个@EnableAutoConfiruation注解,他导入了一个类,在启动的时候加载jar包中所有的META-INF中的/spring.factories配置文件中
org.springframework.boot.autoconfigure.EnableAutoConfiguration所配置的配置类,并加载。
2.加载了很多配置类,但是并不是所有的配置类都会生效,原因是条件注解的存在。
什么是自动配置:springboot 启动的时候会自动创建一些必要bean对象,并放到IOC applicationContext中
会加载所有的bean对象吗?为什么?
如果Spring没有添加任何的附加条件,此时这些配置类中所定义的bean都会被导入到Spring容器中,这样非常消耗内存,因此在Spring中提供了很多的条件注解,通过这些条件注解控制某一个配置是否生效。
具体详细总结:
1.在SpringBoot项目中有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装:@SpringBootConfiguration、@ComponentScan
其中@EnableAutoConfiguration是实现自动化配置的核心注解。
2.其中@EnableAutoConfiguration中是对6个注解的封装,其中@Import注解是核心,它导入AutoConfigurationImportSelector.class,然后AutoConfigurationImportSelector这个类实现了一个导入器接口DeferredImportSelector。该接口继承了ImportSelector接口,再改接口中存在一个方法selctImports.
3.该方法的返回值是一个数组,数组中存储的就是要被导入到spring容器中的类的全类名,在AutoConfigurationImportSelector类中重写了这个方法。
4.在方法内部就是读取了项目的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。
5.在这些配置类中所定义的Bean会根据条件注解所制定的条件来决定是否需要将其导入到Spring容器中。
原文链接:https://blog.csdn.net/qq_41805567/article/details/129111183