前言
自动装配是 Spring Boot 最核心的功能之一,第三方可以基于这个特性非常方便的和 Spring 做整合,实现自己的 Starter,做到开箱即用。
Java 早期并不支持注解,所以那会儿 Spring 只能通过 xml 的形式来配置。早期项目里要引入一个功能模块,首先我们要引入 SDK,然后在 xml 里配置所需的 bean。随着引入的模块越来越多,开发者很快陷入 xml 的旋涡之中。
Spring 3.0 时代,官方开始提供@Import
注解实现自动装配的能力,同时也伴随了一堆以@EnableXXX
命名风格的注解,顾名思义加上这些注解就能启用对应的能力,这俩注解一般配合使用。
到了 Spring Boot 时代,自动装配再度迎来升级,它在@Import
基础上增加了 SPI 的能力,而且还支持条件装配,使用上更加灵活。
理解自动装配
什么是自动装配???
跟自动装配相对立的就是手动装配,早期我们通过 xml 手动往容器里注册 bean 的方式就是手动装配。手动装配的缺点是:
反之,自动装配就是开发者根据 Spring Boot 定制的规范编写AutoConfiguration
类,Spring Boot 会自动加载这些配置类并把对应的 bean 注册到容器,这些 bean 是具备某种能力的,这样第三方就可以很轻松的把自己要提供的功能装进 Spring Boot。有了自动装配,开发者仅需加上少量注解或配置,甚至什么都不加(约定大于配置),就可以为项目引入一个功能模块。
装配的是什么???
从广义上理解,装配的是模块、是组件、是一个具体的功能。从狭义上理解,装配的其实是一个个具备某种能力的 bean。
自动装配是怎么实现的???
通过一个叫@EnableAutoConfiguration
的注解往容器导入了一个叫AutoConfigurationImportSelector
的类,它实现了ImportSelector
接口,Spring 启动时会触发子类方法按照规则加载自动装配类。
设计实现
在使用 Spring Boot 开发时,我们一般会在启动类上加@SpringBootApplication
注解,它就是自动装配的入口。