Spring Boot自动配置原理
相比较于传统的 Spring 应用,搭建一个 SpringBoot 应用,我们只需要引入一个注解 @SpringBootApplication,就可以成功运行。
前面四个不用说,是定义一个注解所必须的,关键就在于后面三个注解:
当然如果你想了解前面四个注解,可以查看我的文章:
@Target、@Retention、@Documented、@Inherited注解的超详细分析
@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan。也就是说我们如果不用 @SpringBootApplication 这个复合注解,而是直接使用最下面这三个注解,也能启动一个 SpringBoot 应用。
前面四个不用说,是定义一个注解所必须的,关键就在于后面三个注解:@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan。也就是说我们如果不用 @SpringBootApplication 这个复合注解,而是直接使用最下面这三个注解,也能启动一个 SpringBoot 应用,其中,Spring Boot的自动配置注解是@EnableAutoConfiguration。
其中,Spring Boot的自动配置最最核心的注解是@EnableAutoConfiguration,
@SpringBootConfiguration 注解
这个注解我们点进去就可以发现,它实际上就是一个 @Configuration 注解,这个注解大家应该很熟悉了,加上这个注解就是为了让当前类作为一个配置类交由 Spring 的 IOC 容器进行管理,因为前面我们说了,SpringBoot 本质上还是 Spring,所以原属于 Spring 的注解 @Configuration 在 SpringBoot 中也可以直接应用。
@ComponentScan 注解
@ComponentScan这个注解也很熟悉,用于定义 Spring 的扫描路径,等价于在 xml 文件中配置 context:component-scan,假如不配置扫描路径,那么 Spring 就会默认扫描当前类所在的包及其子包中的所有标注了 @Component,@Service,@Controller 等注解的类。
通过查看源码可以知道,@ComponentScan使用了@Repeatable(ComponentScans.class)注解,@ComponentScans是聚合多个ComponentScan注解的容器注解,它使ComponentScan注解可以在同一个类或方法上多次使用,@Repeatable注解的例子如下:
@EnableAutoConfiguration注解
这个注解才是实现自动装配的关键,点进去之后发现,它是一个由 @AutoConfigurationPackage 和 @Import 注解组成的复合注解。
@Import的类可以找到下面自动加载自动配置的映射。
写了一半用空补补