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>

经验总结扩展阅读