spring boot启动原理之自定义启动器starter,自定义第三方依赖模块傻瓜式教程

springboot 简单自定义starter

  • 前言
  • 我们都知道springboot 项目中的pom.xml文件中有很多个依赖,其中有很多带有starter的依赖,形如spring-boot-stater-xxx,比如spring-boot-stater-web,spring-boot-stater-jdbc,spring-boot-stater-actuator,这种命名方式是官方指定的,自定义的starter一般采用的都是xxx-spring-boot-stater,比如我们熟悉的mybatis-spring-boot-stater.如果我们也需要像mybatis那样自己写一个可以供其他模块引入的依赖该怎么做呢?下面就简单说说。
  1. 这个场景需要用到的依赖是什么?
<!--所有starter需要的基本配置-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
</dependency>

  1. 如何编写自动配置?

先来了解下我们熟悉的一些自动配置类的注解

@Configuration //指定这个类是一个配置类
@ConditonalOnXXX //在指定条件成立的情况下自动配置类生效
@AutoConfigureAfter //指定自动配置类的顺序
@Bean //添加组件到容器中

@ConfigurationProperties //结合相应的xxxProperties类绑定相关配置信息
@EnableConfigurationProperties //让xxxProperties类注入到容器中

如果要自动配置类能够成功加载,那么请将需要启动加载的自动配置类,配置在META-INF/spring.factories文件中(不熟悉springboot 启动加载逻辑的请先自行了解)
springboot启动会从spring.factories文件中加载配置类,形如
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration

  1. 模式

启动器只用来做依赖导入
再写一个自动配置模块
启动器依赖自动配置
其他模块只需要引入启动器(starter),比如mybatis-spring-boot-stater

下面开始做一个简单的demo

  1. 先创建一个空的工程

创建一个空的project

命名

  1. 添加两个modules
    在这里插入图片描述
    添加第一个maven工程
    这个模块作为启动器使用
    添加第二个模块,这个模块作为自动配置类,和springboot项目结合,所以创建成一个springboot项目
    创建一个springboot项目
    不引入任何模块,直接next
    点击完成
    生成之后的项目结构

  2. 开始写工程

starter项目引入autoconfiguration项目,启动器值作为一个依赖供其他外部项目使用,主要业务逻辑写在autoconfiguration项目中

在这里插入图片描述

将这几个没用的地方都可以删掉

在这里插入图片描述

将其他无用的依赖以及插件都给删除,只留下starter依赖,这个依赖前面说过是基本starter配置

在这里插入图片描述

创建一个HelloService类,这个类是供其他项目使用的

在这里插入图片描述

创建HelloProperties类,这个类是自定义配置文件类,用来接收其他项目配置文件如properties或者yml格式的中以kwq.hello开头的属性值

在这里插入图片描述

HelloServiceAutoConfiguration这个类是真正的自动配置类,生成需要的service对象供外部调用

在这里插入图片描述

如果需要当前项目能够正常整合到spring boot项目中使用,说人话意思就是当spring
boot项目启动时,能够正常初始化我们自定义的配置模块,那么我们需要新建一个META-INF/spring.factoreis文件,将我们的项目在文件中声明,那么spring
boot在启动时会将我们的模块初始化

在这里插入图片描述

  1. 然后将这两个项目install到仓库,在其他项目(比如spring boot项目)引入!

此时可以看到我们的依赖中也有了我们自定义的依赖包了,就如同我们引入mybatis等依赖一样。

在这里插入图片描述

我们新建一个controller类,就可以直接调用我们自定义的service方法了

在这里插入图片描述

假如我们想使用给自定义项目的属性赋值怎么办呢?回想一下我们在引入redis模块是如何定义它的主机,端口,用户名和密码之类的信息呢?
是不是像下面这样?

# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=

同理,我们也是一样的定义属性的方法,在properties文件或者yml文件中进行操作。
在这里插入图片描述

  1. 全部配置完成,启动spring boot xiang项目,访问。就可以看到值能够正常输出,代表我们自定义的starter类可以正常作为第三方依赖使用了。

这里我使用的是postman作为访问工具,当然你也可以使用浏览器访问

在这里插入图片描述

到此,就是我们简单的模仿第三方模块编写的简单starter的demo,只是帮助大家入门而已。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值