【SpringBoot】从零开始封装自己的starter并且引入到其他项目中使用

从零开始封装自己的starter并且引入到其他项目中使用

简介

本文将介绍如何从零开始封装自己的starter并且引入到其他项目中使用

为什么要自己封装starter?

这样可以对spring以及其他第三方提供的starter做二次封装或者封装一些自己需要的内容提供给其他项目使用,提高项目级的代码复用性。

一、创建一个新的spring-boot项目

首先我们需要新建一个spring-boot项目,为了防止发生maven依赖问题,我们这里不选择任何spring提供的组件,如果添加了请确保引用的项目中没有这个组件另外不要忘记改maven源

二、创建META-INF/spring.factories

把test文件夹删掉,main目录下创建resources/META-INF/spring.factories文件

把主程序也删掉,我们的starter不需要启动

三、测试案例

接下来编写一个拦截器,拦截所有方法并且打印一些内容看看效果

先把pom文件中乱七八糟的东西删干净,并引入一个web模块

xml 复制代码
	<dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

Config文件

java 复制代码
package com.ez4sterben.mytestspringbootstarter.config;

import com.ez4sterben.mytestspringbootstarter.interceptor.MyTestInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 我的测试web mvc配置
 *
 * @author ez4sterben
 * @date 2023/07/18
 */
@Configuration
public class MyTestWebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyTestInterceptor())
                .addPathPatterns("/**");
    }
}

Interceptor文件

java 复制代码
package com.ez4sterben.mytestspringbootstarter.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 我的测试拦截器
 *
 * @author ez4sterben
 * @date 2023/07/18
 */
@Component
public class MyTestInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("--------------------starter中的拦截器生效了!------------------------");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

spring.factories文件中加入下面这段内容开启自动配置

java 复制代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.ez4sterben.mytestspringbootstarter.config.MyTestWebMvcConfig

目前项目结构如下

四、打包starter

打开idea右侧maven依次点击生命周期中的install以及package

五、使用starter

打开我们的本地maven仓库

我们的starter已经是jar包的形式了,接下来就打开自己的其他项目来引用这个starter

xml 复制代码
        <dependency>
            <groupId>com.ez4sterben</groupId>
            <artifactId>mytest-spring-boot-starter</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

随后刷新maven启动项目即可,随便找个接口测试一下

测试成功!

六、总结

本文做了一个比较基础的案例,大家可以尝试这种方式封装自己的starter,而且在starter中已经引入了web模块,所以在引入starter的项目中就不用再引入了,通过这种方式可以把在很多项目都固定写的基本内容封装起来,比如通用返回值、基本常量、基本枚举类以及一些统一鉴权和统一异常拦截。可以让这些内容一次配置好后在各个项目中均可以使用。

相关推荐
还在忙碌的吴小二4 小时前
Go-View 数据可视化大屏使用手册
开发语言·后端·信息可视化·golang
哪里不会点哪里.4 小时前
什么是 Spring Cloud?
后端·spring·spring cloud
TsengOnce4 小时前
Docker 安装达梦8数据库-5步成功
java·数据库
树码小子4 小时前
Spring框架:Spring程序快速上手
java·后端·spring
李松桃5 小时前
python第三次作业
java·前端·python
马士兵教育5 小时前
计算机专业学生入行IT行业,编程语言如何选择?
java·开发语言·c++·人工智能·python
本妖精不是妖精5 小时前
搭建 JNI 开发环境:使用 IntelliJ IDEA 和 CLion
java
老毛肚5 小时前
uniapp-ruoyi-spring部署宝塔
java·spring·uni-app
砚边数影5 小时前
决策树实战:基于 KingbaseES 的鸢尾花分类 —— 模型可视化输出
java·数据库·决策树·机器学习·分类·金仓数据库
夕除5 小时前
js--6
java·开发语言