SpringBoot自动装配原理-创新互联
Spring Boot 是一个可以轻松创建独立的、生产级的基于 Spring 的应用程序的框架,Spring Boot 框架将 Spring、MyBatis、SpringMVC 中的一系列配置进行了简化,只需要使用最简单的配置和注解就能快速开发应用程序。通过官网提供的 Spring Initializr 插件可以快速生成 Spring Boot 应用。
网站设计制作过程拒绝使用模板建站;使用PHP+MYSQL原生开发可交付网站源代码;符合网站优化排名的后台管理系统;成都做网站、成都网站制作收费合理;免费进行网站备案等企业网站建设一条龙服务.我们是一家持续稳定运营了10多年的创新互联网站建设公司。什么是自动装配
Spring Boot 相比于 Spring 的一个很大进步点在于不用再手动配置一系列配置文件,Spring Boot 提供了配置应用程序和框架所需要的基本配置,这就是自动配置。
Spring Boot 启动器
Spring Boot 中的一系列启动器是自动装配的最佳实践。比如当引入了一个 spring-boot-starter-web 依赖:
org.springframework.boot spring-boot-starter-web
Spring Boot 框架就会自动引入 web 环境所有的依赖,并且自动配置,Spring Boot 将所有的功能场景,都变成一个个启动器,想要用什么功能,只需要找到对应的启动器就可以了。
Spring Boot 的所有启动器可以在官网https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter中找到,下图是所有启动器中的一小部分:
自动装配原理分析
Spring Boot 的主程序也可以称为启动类,这是开启 Spring Boot 项目的入口。查看源代码推荐使用 IDEA。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootdemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootdemoApplication.class, args);
}
}
@SpringBootApplication 注解标注这个类是一个 SpringBoot 的启动类,这个注解也是自动装配的核心。
@Target、Retention、Documented、Inherited 四个注解是标准的元注解,核心在于@SpringBootConfiguration和@EnableAutoConfiguration这两个注解。
通过继续进入注解内部,可以将@SpringBootConfiguration和@EnableAutoConfiguration这两个注解的结构表示出来:
@SpringBootConfiguration : Spring Boot 的配置
@Configuration : Spring 配置类
@Component : Spring 的组件
@EnableAutoConfiguration : 自动配置
@AutoConfigurationPackage : 自动配置包
@Import({Registrar.class}) : 自动配置包注册
@Import({AutoConfigurationImportSelector.class}) : 导入选择器
@SpringBootConfiguration 声明了这个类为 SpringBoot 的组件,@EnableAutoConfiguration 是自动配置的核心,其中@AutoConfigurationPackage 对配置包册,AutoConfigurationImportSelector 类来进行自动装配。
继续来看看 AutoConfigurationImportSelector 这个类
引入环境。
引入 bean 加载器。
引入资源加载器。
配置导入。
继续向下看,selectImports 中 的getAutoConfigurationEntry 方法第 123 行代码将所有的配置通过 getCandidateConfigurations 方法放进一个 List 集合中
继续进入 getCandidateConfigurations 方法,这个配置获取的路径是 EnableAutoConfiguration.class,也就是@SpringBootApplication 所依赖的两个重要注解的其中一个。这段代码最终想表达的意思是将启动类下的所有配置都导入。
进入 LoadFactoryNames 或者就从 Assert.notEmpty 的信息中,可以发现这些配置来自于 META-INF/spring.factories 中,从 jar 包中可以查看到具体的目录结构
在 spring.factories 文件中存在大量 xxxAutoConfiguration,这个文件记录了所有 starter 的自动装配类,就是这些类在容器中导入了场景需要的所有组件;并通过 @Configuration 自动配置
通过一张图来总结一下自动装配的原理,通过上面对源码的分析,可以看出 SpringBoot 所有的自动配置都在启动类中被扫描和加载。所有的自动配置类都在 spring.properties 中。
自动装配总结起来可以分为以下几步:
Spring Boot 在启动的时候,从类路径下/META-INF/spring.factories 获取指定的值;
将这些自动配置的类导入容器,自动配置就会生效,进行自动配置!
以前我们需要自动配置的东西,现在 Spring Boot 帮我们做了
自动配置的东西都在 spring-boot-autoconfigure.jar 这个包下
它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;
容器中也会存在非常多的 xxxAutoConfiguration
的类(@Bean),就是这些类给容器中导入了这个场景需要的所有组件;并通过@Configuration 自动配置。有了自动配置类,免去了我们手动编写配置文件的步骤。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章名称:SpringBoot自动装配原理-创新互联
文章出自:http://cdiso.cn/article/djsgoc.html