SpringBoot自动装配的原理
首先我们先谈一下什么是自动装配,自动装配就是当我们启动一个SpringBoot项目后一些配置类,和一些bean对象会自动的存入我们的aplication容器中,也就是IOC容器中,不需要我们手动的通过@Service,@Controller 等注解去注入到IOC容器中,
我们可以通过启动类上的@SpringBootAppication注解入手,他下面又分三个主要注解,和一些元注解 分别是@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan @SpringBootConfiguration是一个组合注解 里面又有@Configuration注解 可以将一个我们的启动类 定义成一个配置类并交给IOC容器管理,
@ComponentScan注解是进行组件扫描默认是扫描引导类所在的包及其子包,
@EnableAutoConfiguration注解就是自动配置的核心注解,
在讲这个注解之前,我们先明确一下何如讲依赖jar包中提供的bean导入当前项目的IOC容器中,有两种方法
1、通过在启动类上加ComponentScan 组件扫描指定的包,
2、通过Import注解导入,它可以导入,普通类,配置类,和实现了importSelector接口的类
SpringBoot就是基于实现importSelector接口来实现自动注入的,他先是通过 @Import在IOC容器中注入了AutoConfigurationImportSelector类,这个类底层还是实现了ImportSelector接口,并实现了selectImports()方法而这个方法会去读取两份配置文件,一份儿是 spring.factories,另外一份儿是 autoConfiguration.imports,而在 autoConfiguration.imports 这份儿文件当中,它就会去配置大量准备自动配置的类。并将配置文件中定义的配置类做为selectImports()方法的返回值返回,返回值代表的就是需要将哪些类交给Spring的IOC容器进行管理。
但是autoConfiguration配置文件中的bean不会都加载到IOC容器中,是通过@Conditional注解进行条件装配的,只有条件成立才会声明这个bean交给IOC容器管理