前言

你上次在超市或商场本人推开门是什么时候?大多数大型商店都装置了带感应性能的自动门,尽管所有门都能让你进入,但自动门不须要你入手推拉。与之相似,很多公共场所的卫生间里都装有主动感应水龙头。尽管没有超市自动门这么遍及,但这些设施同样对你没有太多要求,能够很不便地出水。我想这时候你脑海中也浮现出了有数的例子,证实设施让古代生存更加自动化和便捷,而不是简单和减少阻碍。

Spring Boot 基于“约定优于配置”的准则,将Spring开发的自动化水平晋升到了一个新的高度。那么Spring Boot是如何约定,又是如何实现主动配置性能的呢?

Spring Boot利用

Spring Boot初始化

咱们应用IntelliJ IDEA通过Maven初始化一个Spring Boot我的项目,创立实现后,你会看到一个相似下图的利用目录构造。

次要利用程序代码位于src/main/java目录里,资源都在src/main/resources目录里。

  • pom.xml:Maven构建阐明文件。
  • FsBaseApplication.java:应用程序的启动疏导类(bootstrap class),也是次要的Spring配置类。
  • application.yml:用于配置应用程序和Spring Boot的属性。

Spring Boot启动类

咱们在上篇文章讲述了4种初始化Spring Boot易用的形式,然而,不论用那种形式总会生成一个XXXApplication类,如下所示:

package com.fs;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;//开启组件扫描和主动配置@SpringBootApplicationpublic class FsBaseApplication {    //负责启动疏导应用程序    public static void main(String[] args) { SpringApplication.run(FsBaseApplication.class, args); }}

@SpringBootApplication开启了Spring的组件扫描和Spring Boot的主动配置性能。实际上,@SpringBootApplication将三个有用的注解组合在了一起。

  • Spring的@Configuration:表明该类应用Spring基于Java的配置。
  • Spring的@ComponentScan:启用组件扫描,这样你写的Web控制器类和其余组件能力被主动发现并注册为Spring应用程序上下文里的Bean。本章稍后会写一个简略的Spring MVC控制器,应用@Controller进行注解,这样组件扫描能力找到它。
  • Spring Boot 的 @EnableAutoConfiguration :这个不起眼的小注解也能够称为@Abracadabra,就是这一行配置开启了Spring Boot主动配置的魔力,让你不必再写成篇的配置了。

在Spring Boot的晚期版本中,你须要在FsBaseApplication类上同时标上这三个注解,但从Spring Boot 1.2.0开始,有@SpringBootApplication就行了。下图展现了@SpringBootApplication注解组合构造关系。

主动配置的神秘面纱

Spring Boot的主动配置是一个运行时(更精确地说,是应用程序启动时)的过程,思考了泛滥因素,才决定Spring配置应该用哪个,不该用哪个。Spring Boot主动配置性能运行过程中波及到的几个外围性能是:@EnableAutoConfiguration、spring factories、AutoConfiguration类、@Conditional及各种Starters。咱们用一句话来形容整个过程:Spring Boot通过@EnableAutoConfiguration注解开启主动配置,加载spring.factories中注册的各种AutoConfiguration类,当某个AutoConfiguration类满足其注解@Conditional指定的失效条件(Starters提供的依赖、配置或Spring容器中是否存在某个Bean等)时,实例化该AutoConfiguration类中定义的Bean(组件等),并注入Spring容器,就能够实现依赖框架的主动配置。如下图所示:

  • @EnableAutoConfiguration:该注解由组合注解@SpringBootApplication引入,实现主动配置开启,扫描各个jar包下的spring.factories文件,并加载文件中注册的AutoConfiguration类等。
  • ·spring.factories:配置文件,位于jar包的META-INF目录下,依照指定格局注册了主动配置的AutoConfiguration类。spring.factories也能够蕴含其余类型待注册的类。该配置文件不仅存在于Spring Boot我的项目中,也能够存在于自定义的主动配置(或Starter)我的项目中。
  • ·AutoConfiguration类:主动配置类,代表了Spring Boot中一类以XXAutoConfiguration命名的主动配置类。其中定义了三方组件集成Spring所需初始化的Bean和条件。
  • ·@Conditional:条件注解及其衍生注解,在AutoConfiguration类上应用,当满足该条件注解时才会实例化AutoConfiguration类。
  • ·Starters:三方组件的依赖及配置,Spring Boot曾经预置的组件。Spring Boot默认的Starters我的项目往往只蕴含了一个pom依赖的我的项目。如果是自定义的starter,该我的项目还需蕴含spring.factories文件、AutoConfiguration类和其余配置类。

总结

本文从初始化一个Spring Boot利用开始,一步一步走进Spring Boot的外围性能,带大家从总体上理解Spring Boot主动配置的原理以及主动配置外围组件的运作过程。只有把握了这些根底的组建内容及其性能,咱们在后续集成其余三方类库的主动配置时,才可能更加清晰地理解它们都使用了主动配置的哪些性能。尽管主动配置很不便,但在开发Spring应用程序时其中的一些用法也有点果断。要是你在配置Spring时心愿或者须要有所不同,该怎么办?后续文章将会看到如何笼罩Spring Boot主动配置,借此达成应用程序的一些指标,还有如何使用相似的技术来配置本人的应用程序组件。

最初的最初

为初学者提供学习指南,为从业者提供参考价值。我深信码农也具备产生洞见的能力。扫描下图二维码关注,学习和交换!