starter可以理解为Spring Boot中的一站式集成启动器,包含了一系列可以集成到应用中的依赖项,可以快递集成spring组件及其框架,而不需要到处找示例代码。

一、为什么要用starter?

在springboot还没有出来之前,我们使用spring开发项目,如果程序需要连接数据库,我们一般会使用Hibernate或者Mybatis等orm框架。

使用mybatis框架操作步骤:

  • 到maven仓库找到需要引入的mybatis的jar包,选择合适的版本
  • 到maven仓库找到mybatis-spring整合的jar包,选择合适的版本
  • 在spring的application.xml文件中配置dataSource和mybatis相关信息

过程非常繁琐,并且需要选择合适的版本,否则会出现版本冲突等一系列问题。而SpringBoot为了解决以上两个问题引入了starter机制。我们只需要通过简单的配置就可以使用,“开箱即用”。

一个完整的Spring Boot Starter 一般需要包含一下组件:

  • 完成自动配置的自动装配模块
  • 为自动装配模块提供的所有依赖项。

简而言之,就是添加一个Starter应该提供使用该starter需要的一切,比如我们想使用spring jap访问数据库,只需要加入官方提供的spring-boot-starter-data-jap启动依赖即可。

SpringBoot提供了很多开箱即用的Starter,大概有近50中,其中常用的如下:

解密Spring Boot Starter与自动配置:探秘神奇的背后_jar包

二、SpringBoot的自动配置原理

在导入starter之后,SpringBoot主要帮我们完成了两件事情

  • 相关组件的自动导入
  • 相关组件的自动配置

这两件事情统一成为SpringBoot的自动配置

自动配合原理:

我们从主程序入口来探索下整个过程的原理:

@SpringBootApplication //标注这个类是一个springboot的应用
public class CommunityApplication {
    public static void main(String[] args) {
        //将springboot应用启动
        SpringApplication.run(CommunityApplication.class, args);
    }
}

@SpringBootApplication注解内部结构如下图所示

解密Spring Boot Starter与自动配置:探秘神奇的背后_spring boot_02

AutoConfigurationImportSelector :重点看该类中重写的selectImports方法,看下它返回的字符串数组是如何得来的:

解密Spring Boot Starter与自动配置:探秘神奇的背后_spring boot_03

我们可以去到上边提到的spring.factories文件中去看一下,找到spring官方提供的spring-boot-autoconfigure包,在其下去找一下该文件:

@SpringBootApplication注解内部结构如下图所示:

解密Spring Boot Starter与自动配置:探秘神奇的背后_spring boot_04

AutoConfigurationImportSelector :重点看该类中重写的selectImports方法,看下它返回的字符串数组是如何得来的:

解密Spring Boot Starter与自动配置:探秘神奇的背后_自动装配_05

我们可以去到上边提到的spring.factories文件中去看一下,找到spring官方提供的spring-boot-autoconfigure包,在其下去找一下该文件:

解密Spring Boot Starter与自动配置:探秘神奇的背后_spring boot_06

可以看到这个就是SpringBoot官方为我们提供的所有自动配置类的候选列表。我们可以在其中找到一个我们比较熟悉的自动配置类去看一下它内部的实现:

可以看到这些一个个的都是JavaConfig配置类,而且都通过@Bean注解向容器中注入了一些Bean

解密Spring Boot Starter与自动配置:探秘神奇的背后_spring_07

结论:

  • SpringBoot在启动的时候从类路径下的 META-INF/spring.factories中获取EnableAutoConfiguration指定的所有自动配置类的全限定类名
  • 将这些自动配置类导入容器,自动配置类就生效,帮我们进行自动配置工作;
  • 整个J2EE的整体解决方案和自动配置都在 spring-boot-autoconfigure的jar包中;
  • 它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件,并配置好这些组件;

Spring Boot自动装配使用总结:

  • Spring Boot启动会加载大量的自动配置类,可以开一下加载的默认配置类当中有没有我们需要的配置,只要我们要的组件从在其中,我们就不需要在手动配置了。
  • 给容器中自动配置添加组件的时候,会从properties类中获取某些属性,我们只需要在配置文件中指定这些属性即可。

 注:喜欢的朋友可以关注公众号“JAVA学习课堂”方便阅读,内容同步更新。

解密Spring Boot Starter与自动配置:探秘神奇的背后_jar包_08