starter的开发
依赖大家都引入过吧,就是那种dependency,有没有想过自己也写一个starter呢? 接下来就跟着我看看starter的开发吧,过程很简单,需要花费您不到半个小时的时间。
为什么要开发starter
好处: 使用了starter,开发者只要引入了starter,可以在配置文件当中写配置,自动创建客户端,以前我们用到一个东西的时候就会引入starter,然后就可以进行配置,我将它称为个性化,然后使用一些注解就可以用了。另外,注意到在写配置文件的时候,会有提示,所以我们自己写的starter最好也有提示.
对pom文件改动
引入这个依赖就可以帮助开发者实现自动代码补全功能。
注意:
最终的pom.xml长这个鬼样子:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.10</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--springboot的核心启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--比较关键-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
删除启动类,写配置
编写具体代码在里面,直接返回一个ApiClient(这个是你想让代码return的方法)
在resources下写一个META-INF/spring.factories,当中写org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.demo.ApiClientConfig
maven install
- 用maven进行install操作,安装为本地的依赖
引入starter
- 将之前api那个项目里面写的东西删掉,引入自己写的starter
导入新的项目中:
controller之前的代码
package com.example.demo.controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* 测试接口
*
* @version 1.0
* @Author carrot
* @Date 2023/3/29 10:34
*/
@RestController
@RequestMapping("/name")
public class ApiController {
/**
* get方法获取名字
*
* @param name 名字
* @return "GET 你的名字是: "+name
*/
@GetMapping("/")
public String getNameByGet(String name) {
return "GET 你的名字是: " + name;
}
/**
* post方法获取名字
*
* @param name 名字
* @return "POST 你的名字是: "+name
*/
@PostMapping("/")
public String getNameByPost(@RequestParam String name) {
return "POST 你的名字是: " + name;
}
/**
* 通过JSON获取名字
*
* @param user json对象
* @return "JSON 你的名字是: " + user.getName()
*/
@PostMapping("/user")
public String getNameByUser(@RequestBody User user, HttpServletRequest request) {
String accessKey = request.getHeader("accessKey");
String secretKey = request.getHeader("secretKey");
if (!secretKey.equals("carrot")){
throw new RuntimeException("无权限");
}
if (!accessKey.equals("carrot")){
throw new RuntimeException("无权限");
}
//todo 根据request获取请求的参数,然后再次将用户请求参数和secretKey通过签名算法生成一个签名,
// 判断传来的签名和生成的签名是否一致,另外,还要判断时间戳和当前时间不超过五分钟以及随机数的范围不超过10000,
// 当然这里的secretKey也是需要到数据库当中去查的
return "JSON 你的名字是: " + user.getName();
}
}
效果
当然,自己写的starter也可以直接在maven的库里面看到
测试一波:
好神奇是不是!!!
这只是将自己写的starter放到了本地仓库,如果你也想让别人访问到你写的starter,可以将其发布到maven仓库中,安利给你身边的小伙伴,说不定还能蹭一波热度捏。
最后,创作不易,给个小心心捏