您现在的位置是:亿华云 > 数据库
手把手带你编写属于自己的 Starter
亿华云2025-10-04 03:32:34【数据库】3人已围观
简介前面的文章阿粉给大家介绍了SpringBoot的自动装配功能,相信大家对自动装配都有了很好的理解,那么今天阿粉通过一个示例来给大家演示一下如何编写一个自己的starter。再编写starter
前面的手把手带属于文章阿粉给大家介绍了 SpringBoot 的自动装配功能,相信大家对自动装配都有了很好的编写理解,那么今天阿粉通过一个示例来给大家演示一下如何编写一个自己的自己 starter。
再编写 starter 之前我们先了解一下什么是手把手带属于 starter,一个 starter 其实就是编写对一个功能的集成封装,然后对外提供一个依赖,自己让业务去使用,手把手带属于像我们熟悉的编写 Redis,mongo,自己mybatis 等。手把手带属于另外由于任何人都可以编写自己的编写 starter,那么为了区分官方的自己 starter 和个人的 starter,通常在命名上面会有一个规范。手把手带属于所以 SpringBoot 官方提出,编写第三方在建立自己的自己 Starter 的时候命名规则统一用xxx-spring-boot-starter,而官方提供的 Starter 统一命名方式为spring-boot-starter-xxx。
通过我们前面的文章,我们知道自动装配首先要有一个配置类,其次还要有 spring.factories 文件,云南idc服务商所以这两步是必不可少的。接下来我们就实操一下。
编写配置类编写配置类首先要添加一个自动装配的依赖,然后再编写对应的配置类和业务实现类,在 pom 中添加如下依赖:
spring-boot-autoconfigure
装配类:
package com.example.hash.starter.config;
import com.example.hash.starter.service.MyHashTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnClass({ MyHashTemplate.class})
@EnableConfigurationProperties(MyHashProperties.class)
public class MyHashAutoConfiguration {
@Autowired
MyHashProperties myHashProperties;
@Bean
@ConditionalOnMissingBean(MyHashTemplate.class)
public MyHashTemplate myJsonService() {
MyHashTemplate myHashTemplate = new MyHashTemplate();
myHashTemplate.setPrefix(myHashProperties.getHashPre());
return myHashTemplate;
}
}属性类:
package com.example.hash.starter.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "ziyou.hash")
public class MyHashProperties {
private String hashPre;
public String getHashPre() {
return hashPre;
}
public void setHashPre(String hashPre) {
this.hashPre = hashPre;
}
}业务实现类:
package com.example.hash.starter.service;
import javax.xml.bind.DatatypeConverter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MyHashTemplate {
private String prefix;
public String myHash(String origin) {
if (null == origin || origin.length() == 0) {
return null;
}
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(origin.getBytes());
byte[] digest = md.digest();
return this.prefix + ":" + DatatypeConverter.printHexBinary(digest).toUpperCase();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
}简单说明一下上面三个类都是干什么的,MyHashTemplate 该类是实际业务需要注入的类,用来对入参进行 MD5 摘要,然后返回一个拼接了前缀的字符串给业务。这个前缀是通过 application.properties 中配置 ziyou.hash.hashPre=JavaGeekTech666 配置后传递过来的。MyHashProperties 是接受属性值的类,MyHashAutoConfiguration 则是自动装配类,这个类会根据条件进行 MyHashTemplate Bean 的初始化,并将前缀进行赋值。
增加配置文件最后还需要在 resource 文件中编写一个 META-INF/spring.factories 文件,内容如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.hash.starter.config.MyHashAutoConfiguration前面的 Key 是固定写法,后面的站群服务器 value 就是配置类的全路径引用地址。
在项目中使用编写完了 starter 过后,我们再创建一个新的 web 应用,在其中增加我们编写的 starter 来验证是否成功。第一步在 pom 文件中增加依赖
myhash-spring-boot-starter
package com.example.demo.controller;
import com.example.demo.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
private HelloService helloService;
@GetMapping(value = "/hello")
public String hello(@RequestParam("name") String name) {
return helloService.sayHello(name);
}
}package com.example.demo.service;
import com.example.hash.starter.service.MyHashTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class HelloService {
@Autowired
private MyHashTemplate myHashTemplate;
public String sayHello(String name) {
return myHashTemplate.myHash(name);
}
}在 application.properties 文件中增加如下配置:
ziyou.hash.hashPre=JavaGeekTech启动项目,我们访问地址 http://127.0.0.1:8080/hello?name=ziyou 可以看到效果如下:
至此可以看到,我们自己编写的 starter 已经成功生效了,只不过功能很简单而已,我们完全可以根据自己需要的实际功能来实现一个复杂一点的 starter 来提供开箱即用的效果。
在一些大公司特别是一些中间件或者中台团队,很多时候都是提供各种工具的 starter 来给业务团队使用的,毕竟很多重复的功能如果每个业务团队都自己开发的话,完全是浪费资源,通过中台团队统一封装 starter,让各个业务团队拿来就用快速搭建业务即可。
很赞哦!(1)
相关文章
- 为啥修改dns服务器?dns服务器与域名有何联系?
- 5. 四种状态过后,域名管理机构释放域名给公众注册。
- 第五步:重复第四步,直到找到正确的纪录。
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 其次,一般域名注册有一个获取密码的按钮,域名注册商点击后会向您发送密码。在得到域名注册商发送的密码后,将其传输到域名服务提供商网站,然后输入密码,此时域名呈现申请状态。提交申请后,原注册人通常会向您发送一封电子邮件,询问您是否同意转让。此时,您只需点击同意转移按钮,域名注册商就可以成功转移。
- 域名和网址一样吗?域名和网址有什么区别?
- 为什么说注册域名注意细节?哪些我们不能忽视?
- 公司名字不但要与其经营理念、活动识别相统一,还要能反映公司理念,服务宗旨、商品形象,从而才能使人看到或听到公司的名称就能产生愉快的联想,对商店产生好感。这样有助于公司树立良好的形象。
- 网站页面结构改版,仅是页面样式发生变化,不会对排名、收录有影响;只有涉及到页面URL改变,才会对网站排名、收录有影响。
热门文章
站长推荐
(4) 使用何种形式的域名后缀对网页搜索影响不大,但域名后缀也需要考虑方便用户记忆
ICANN 规章禁止转移已经被记录或者在60天前内转移的域名。
什么是im域名?新手需要了解im域名哪些?
.com域名是国际最广泛流行的通用域名,目前全球注册量第一的域名,公司企业注册域名的首选。国际化公司通常会注册该类域名。
国内域名
CNAME:对应解析的记录值为域名地址
比较短的域名方便用户记忆和传播,它带来的好处往往会超过其他类型的域名,如果你非要域名短而且还要包含关键词,那么往往会事与愿违,现在这种域名基本上是可遇而不可求的。
前面这两个步骤都是在本机完成的。到这里还没有涉及真正的域名解析服务器,如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。