从零开始封装自己的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模块
<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文件
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 {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyTestInterceptor()).addPathPatterns("/**");}
}
Interceptor文件
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 {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("--------------------starter中的拦截器生效了!------------------------");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}
spring.factories文件中加入下面这段内容开启自动配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.ez4sterben.mytestspringbootstarter.config.MyTestWebMvcConfig
目前项目结构如下
四、打包starter
打开idea右侧maven依次点击生命周期中的install以及package
五、使用starter
打开我们的本地maven仓库
我们的starter已经是jar包的形式了,接下来就打开自己的其他项目来引用这个starter
<dependency><groupId>com.ez4sterben</groupId><artifactId>mytest-spring-boot-starter</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
随后刷新maven启动项目即可,随便找个接口测试一下
测试成功!
六、总结
本文做了一个比较基础的案例,大家可以尝试这种方式封装自己的starter,而且在starter中已经引入了web模块,所以在引入starter的项目中就不用再引入了,通过这种方式可以把在很多项目都固定写的基本内容封装起来,比如通用返回值、基本常量、基本枚举类以及一些统一鉴权和统一异常拦截。可以让这些内容一次配置好后在各个项目中均可以使用。