如何自定义SpringBoot中的starter,并且使用它
创始人
2024-03-27 06:43:46
0

目录

1 简介

2 规范

2.1 命名

2.2 模块划分

3  示例


1 简介

        SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁琐的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就自动扫描到要加载的信息并启动相应的默认配置,starter让我们摆脱了各种依赖库的处理,SpringBoot会自动通过classpath路径下的类发现需要的bean,并注册进IOC容器,SpringBoot提供了针对日常企业研发应用研发各种场景的spring-boot-starter依赖模块。

2 规范

2.1 命名

SpringBoot提供的starter以spring-boot-starter-xxx的方式命名,如mvc

        org.springframework.bootspring-boot-starter-web

而第三方默认自定义的starter使用xxx-spring-boot-starter的命名规则,以此来区分springBoot提供的starter,如mybatis。这也是约定大于配置的一种理念。

        com.baomidoumybatis-plus-boot-starter3.4.0

2.2 模块划分

一个标准Spring boot Starter的组成:

autoconfigure模块:一般包含自动配置相关代码

starter模块:提供对autoconfigure模块的依赖以及其他的二方依赖,一般业务方通过依赖starter来实现这个组件的依赖

3  示例

功能:分每一个分配中国国籍

相关依赖:


4.0.0org.springframework.bootspring-boot-starter-parent2.2.6.RELEASE com.liubujunlearn-spring-boot-starter0.0.1-SNAPSHOTlearn-spring-boot-starterDemo project for Spring Boot1.8org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-configuration-processororg.springframework.bootspring-boot-autoconfigureorg.projectlomboklombok






第一个工程结构如下:

准备一个Service:

public interface UserService {String printUser(String name);
}

Service的实现类:

@Service
public class UserServiceImpl implements UserService {LearnProperties learnProperties;public UserServiceImpl(LearnProperties learnProperties) {this.learnProperties = learnProperties;}@Overridepublic String printUser(String name) {return name+" is a citizen of "+learnProperties.getNationality();}
}

属性类:国籍从application.properties文件中获取

@ConfigurationProperties(prefix = "starter.user") //将配置文件中的相关属性与Java Bean进行动态绑定
@Data
public class LearnProperties {/*** 国籍*/private String nationality;}

配置类:

@Configuration
@EnableConfigurationProperties(LearnProperties.class) //让使用@ConfigurationProperties注解的类(LearnProper)生效
@ConditionalOnProperty(prefix = "starter",name = "isopen",havingValue = "true",matchIfMissing = true)
public class StarterAutoConfig {@AutowiredLearnProperties learnProperties;@BeanUserService userService(){return new UserServiceImpl(learnProperties);}
}

//prefix为配置文件中的前缀,

//name为配置的名字

//havingValue是与配置的值对比值,当两个值相同返回true,配置类生效

添加文件工厂:spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.liubujun.learnspringbootstarter.config.StarterAutoConfig

以上是第一个工程配置完成之后进行打包:

 如此一个starter就制作完成了,那么如何使用它呢,可以想一想平时我们使用第三方依赖的时候是如何去使用它们的starter的,只需要在pom文件中引入该starter就好了。

此时准备第二个工程进行测试,工程结构如下:

步骤一:

在pom文件中引入上一个工程的依赖,如下:

        com.liubujunlearn-spring-boot-starter0.0.1-SNAPSHOT

 步骤二:

在配置文件中进行配置(此处的配置是根据引入上一个工程的依赖来进行配置的,就是第一个工程的属性类)

starter.user.nationality=the People's Republic of China
starter.isopen=true

步骤三:

建一个测试类

@RestController
@RequestMapping("test")
public class TestController {@ResourceUserService userService;@GetMapping("test")public String testController(String name){return userService.printUser(name);}
}

测试结果如下:

 可以发现,引入了另外一个工程的starter之后,可以使用里面的相关代码,这也侧面印证了自己之前只引入依赖而没有思考是如何实现的。

相关内容

热门资讯

西藏多维度惩治虚假诉讼 近日,自治区人民检察院联合自治区高级人民法院、公安厅、司法厅召开首次虚假诉讼惩治联席会议,共同会签《...
制度创新激活跨境投资新活力 中... 12月26日,河北华海股权投资基金合伙企业(有限合伙)在中国(河北)自由贸易试验区正定片区(以下简称...
南宁全力推动各项社保惠企政策落... “我们企业享受到社保降费率和稳岗返还等资金,生产经营得以降本增效,也稳住了人才队伍。”12月23日,...
原告向法官出示证据,照片右下角... 近日,湖北孝感大悟法院民二庭在审理一起房屋租赁合同纠纷案时,精准识破原告方利用AI技术伪造证据的行为...
锚定“十五五”开局 专家建言宏... 12月27日,中国社会科学院财经战略研究院、浙江财经大学共同举办的“财经战略年会(2025)暨第二届...
每周股票复盘:锴威特(6886... 截至2025年12月26日收盘,锴威特(688693)报收于37.41元,较上周的37.28元上涨0...
资深征地律师助力维权,孙侠律师 在征地拆迁领域,遇到专业、靠谱的律师至关重要。资深征地律师、出名征地律师的专业服务,能为当事人在复杂...
推动法律监督新格局走深走实 推动法律监督新格局走深走实 ——专访二级大检察官,天津市检察院党组书记、检察长陈凤超 天津市检察院...
鱼全翻着白肚皮,水还变黑了!养... 图片来源:摄图网 本文为《方圆》杂志原创稿件 这天,养鱼户陆大军发现 鱼塘里的鱼竟然全部翻着白肚皮,...
问法预告|遇到网络纠纷不知如何... 如今,互联网已经成为人们生活工作的重要场所,随着应用场景的增多,与互联网有关的纠纷也呈现上升趋势。从...