一、自定义starter介绍
在spring boot中,starter是一种特殊的依赖,它可以帮助开发人员快速引入和配置某个特定的功能模块。
spring boot的官方starter并不一定包含所有开发人员所需的功能,这时候就需要自定义starter来满足特定项目的需求。
自定义starter是一种自包含的、可重用的模块,它封装了一组特定功能的依赖和配置,并提供了简化配置的方式。通过自定义starter,开发人员可以将一些常用的功能封装起来,使得在其他项目中引入这些功能变得更加简单和方便。
二、自定义starter的好处及优势
特点及优势 | 说明 |
---|---|
模块化 | 自定义starter可以将特定的功能模块化,使得开发人员可以更方便地管理和维护代码。 |
简化配置 | 通过自定义starter,开发人员可以简化配置,减少重复的配置工作,提高开发效率。 |
提高代码重用性 | 自定义starter可以封装一组特定功能的依赖和配置,使得在其他项目中引入这些功能变得更加简单和方便,从而提高代码重用性。 |
自定义功能 | 如果spring boot的官方starter不能满足项目的需求,那么自定义starter就可以发挥重要作用。开发人员可以根据项目需求自定义starter,从而实现一些特定的功能。 |
三、自定义starter应用场景
在我们的日常开发工作中,可能会需要开发一个通用模块,以供其它工程复用。springboot就为我们提供这样的功能机制,我们可以把我们的通用模块封装成一个个starter,这样其它工程复用的时候只需要在pom中引用依赖即可,由springboot为我们完成自动装配。
常见的应用场景:
1)通用模块-短信发送模块
2)基于aop技术实现日志切面
3)分布式雪花id,long转string,解决精度问题
4)微服务项目的数据库连接池配置
5)微服务项目的每个模块都要访问redis数据库,每个模块都要配置redistemplate
四、自定义starter
我们可以先参考一下mybatis的starter,一般情况下起步依赖会由两个工程组成,一个是xxx-autoconfigure提供自动配置功能,另一个是xxx-starter提供依赖管理功能。同时会在starter中引入autoconfigure,将来使用者引入starter就可以了。
了解了自定义starter的套路后,我们来自定义一个mybatis的starter。
1、创建autoconfigure的maven工程
创建一个maven工程,名字叫做dmybatis-spring-boot-autoconfigure,前面加d是为了和mybatis官方的起步依赖区分开。
注意命名规范:springboot官方提供的starter一般以spring-boot-starter-xxxx方式命名,官方建议自定义的starter使用xxxx-spring-boot-starter命名。用来区分第三方的starter和springboot官方的starter。
2、创建starter的maven工程
再创建一个maven工程,名字叫做dmybatis-spring-boot-starter。
3、在autoconfigure的pom文件中引入mybatis的所需依赖
首先我们观察一下mybatis的官方起步依赖包含哪些子依赖:
- org.springframework.boot:spring-boot-starter:3.3.3
- org.springframework.boot:spring-boot-starter-jdbc:3.3.3
- org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:3.0.3
- org.mybatis:mybatis:3.5.14
- org.mybatis:mybatis-spring:3.0.3
其中org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:3.0.3依赖我们不需要引入,因为autoconfigure模块由我们自定义。只需在autoconfigure的pom文件中引入其他的依赖:
<dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter</artifactid> <version>3.3.3</version> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-jdbc</artifactid> <version>3.3.3</version> </dependency> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>3.5.14</version> </dependency> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis-spring</artifactid> <version>3.0.3</version> </dependency> </dependencies>
4、编写自动配置类mybatisautoconfiguration
@autoconfiguration // 表识当前类是一个自动配置类 public class mybatisautoconfiguration { // sqlsessionfactorybean @bean public sqlsessionfactorybean sqlsessionfactorybean(datasource datasource) { sqlsessionfactorybean sqlsessionfactorybean = new sqlsessionfactorybean(); sqlsessionfactorybean.setdatasource(datasource); return sqlsessionfactorybean; } // mapperscannerconfigurer @bean public mapperscannerconfigurer mapperscannerconfigurer(beanfactory beanfactory) { mapperscannerconfigurer mapperscannerconfigurer = new mapperscannerconfigurer(); // 扫描的包:启动类所在的包及其子包 list<string> packages = autoconfigurationpackages.get(beanfactory); // 获取启动类所在的包名 string basepackage = packages.get(0); // 因为启动类所在的包只有一个,直接获取第一个 mapperscannerconfigurer.setbasepackage(basepackage); // 设置mapper的包扫描路径 // 扫描的注解:@mapper mapperscannerconfigurer.setannotationclass(mapper.class); return mapperscannerconfigurer; } }
5、编写imports配置文件
在autoconfigure项目的/resources/meta-inf/spring目录下创建org.springframework.boot.autoconfigure.autoconfiguration.imports配置文件,注意存放路径要严格遵循这个文件夹名和文件名,springboot才会识别到配置文件。
在imports文件中,我们只需要填写mybatis的自动配置类的全类名即可:
com.aizen.config.mybatisautoconfiguration
6、在starter的pom文件中引入autoconfigure的文件
<dependencies> <dependency> <groupid>com.aizen</groupid> <artifactid>dmybatis-spring-boot-autoconfigure</artifactid> <version>1.0-snapshot</version> </dependency> </dependencies>
7、测试自定义starter是否生效
在springboot-mybatis项目中,已经配置了datasource数据源,并写好了后端数据访问接口。
spring: datasource: driver-class-name: com.mysql.cj.jdbc.driver url: jdbc:mysql://localhost:3306/mybatis username: root password: root
@mapper public interface usermapper { @select("select * from user where id = #{id}") user findbyid(integer id); }
在项目的pom文件中引入自定义mybatis的starter依赖:
<!-- 自定义的mybatis起步依赖 --> <dependency> <groupid>com.aizen</groupid> <artifactid>dmybatis-spring-boot-starter</artifactid> <version>1.0-snapshot</version> </dependency> <!--mysql驱动依赖--> <dependency> <groupid>com.mysql</groupid> <artifactid>mysql-connector-j</artifactid> </dependency>
通过postman测试请求接口,成功查询到数据,说明自定义starter已经生效!
从提供的mybatis自定义starter结构可以看出,starter就是一个普通的maven项目,引入了需要配置的模块后,帮用户写好接入spring需要的配置操作,再进行一次封装。用户就可以省去配置的过程,做到引入就自动配置。
以上就是一文详解springboot3如何自定义starter的详细内容,更多关于springboot3自定义starter的资料请关注代码网其它相关文章!
发表评论