SpringBoot的starter到底是什么?

前言我們都知道,Spring的功能非常強大,但也有些弊端 。比如:我們需要手動去配置大量的參數,沒有默認值 , 需要我們管理大量的jar包和它們的依賴 。
為了提升Spring項目的開發效率,簡化一些配置,Spring官方引入了SpringBoot 。
當然,引入SpringBoot還有其他原因,在這里就不過多描述了 。
本文重點跟大家一起聊聊SpringBootstarter機制,因為它太重要了 。

SpringBoot的starter到底是什么?

文章插圖
1 為什么要用starter?在SpringBoot還沒有出來之前 , 我們使用Spring開發項目 。如果程序需要連接數據庫,我們一般會使用HibernateMybatisORM框架,這里我以Mybatis為例,具體的操作步驟如下:
  1. 到maven倉庫去找需要引入的mybatis jar包,選取合適的版本 。
  2. 到maven倉庫去找mybatis-spring整合的jar包,選取合適的版本 。
  3. 在spring的applicationContext.xml文件中配置dataSource和mybatis相關信息 。
當然有些朋友可能會指正,不是還需要引入數據庫驅動包嗎?
確實需要引入,但數據庫驅動有很多,比如:mysql、oracle、sqlserver , 這不屬于mybatis的范疇,使用者可以根據項目的實際情況單獨引入 。
如果程序只是需要連接數據庫這一個功能還好,按上面的步驟做基本可以滿足需求 。但是,連接數據庫可能只是龐大的項目體系中一個環節,實際項目中往往更復雜,需要引入更多的功能,比如:連接redis、連接mongodb、使用rocketmq、使用excel功能等等 。
引入這些功能的話,需要再把上面的步驟再重復一次,工作量無形當中增加了不少,而且有很多重復的工作 。
另外,還是有個問題,每次到要到maven中找合適的版本,如果哪次找的mybatis.jar包 和 mybatis-spring.jar包版本不兼容,程序不是會出現問題?
SpringBoot為了解決以上兩個問題引入了starter機制 。
2 starter有哪些要素?我們首先一起看看mybatis-spring-boot-starter.jar是如何定義的 。
SpringBoot的starter到底是什么?

文章插圖
可以看到它的META-INF目錄下只包含了:
  • pom.protperties配置maven所需的項目version、groupId和artifactId 。
  • pom.xml配置所依賴的jar包 。
  • MANIFEST.MF 這個文件描述了該Jar文件的很多信息 。
  • spring.provides 配置所依賴的artifactId,給IDE使用的 , 沒有其他的作用 。
注意一下,沒有一行代碼 。
我們重點看一下pom.xml,因為這個jar包里面除了這個沒有啥重要的信息
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot</artifactId><version>1.3.1</version></parent><artifactId>mybatis-spring-boot-starter</artifactId><name>mybatis-spring-boot-starter</name><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId></dependency></dependencies></project>從上面可以看出,pom.xml文件中會引入一些jar包,其中除了引入spring-boot-starter,之外重點看一下:mybatis-spring-boot-autoconfigure 。
我們找到mybatis-spring-boot-autoconfigure.jar文件 , 打開這個文件 。
SpringBoot的starter到底是什么?

文章插圖
里面包含如下文件: