自定义Springboot Starter

创建一个Springboot Starter,借助该Starter我们可以自定义欢迎消息。
本Starter的内容不是重点,重点是创建Starter的流程。

1. 创建Starter工程

1.1 创建Springboot项目

在这里插入图片描述

1.2 导入相关依赖,删除spring-boot-maven-plugin

<?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.0</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.wyw</groupId><artifactId>hello-spring-boot-starter</artifactId><version>0.0.1-SNAPSHOT</version><name>hello-spring-boot-starter</name><description>hello-spring-boot-starter</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--自动配置类--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>2.7.13</version></dependency><!--配置文件的自动提示--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>2.5.9</version></dependency></dependencies><!--注释掉该插件-->
<!--    <build>-->
<!--        <plugins>-->
<!--            <plugin>-->
<!--                <groupId>org.springframework.boot</groupId>-->
<!--                <artifactId>spring-boot-maven-plugin</artifactId>-->
<!--            </plugin>-->
<!--        </plugins>-->
<!--    </build>--></project>

1.3 创建属性类

在此类上添加@ConfigurationProperties注解,@ConfigurationProperties是Springboot提供读取配置文件的一个注解。

package com.wyw.hellospringbootstarter.property;import org.springframework.boot.context.properties.ConfigurationProperties;/*** @author name:    silk* @version 1.0* @description: 创建 HelloProperties 属性类, 在此类上添加 @ConfigurationProperties注解* @date 2024/6/6 21:25*/
// prefix = "com.wyw.hello" 根据前缀去读取配置文件中配置的对应的属性信息
@ConfigurationProperties(prefix = "com.wyw.hello")
public class HelloProperties {// 欢迎谁private String name;// 欢迎语private String content;// 欢迎语说几遍private int loop;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public int getLoop() {return loop;}public void setLoop(int loop) {this.loop = loop;}
}

1.4 创建服务类,无需注入到Spring容器

package com.wyw.hellospringbootstarter.service;/*** @author name:    silk* @version 1.0* @description: 创建使用属性类的方法类 XXXService, 该类无需注入到spring容器中* @date 2024/6/6 21:31*/
public class HelloService {private String name;private String content;private int loop;public HelloService() {}public HelloService(String name, String content, int loop) {this.name = name;this.content = content;this.loop = loop;}public void sayHello() {for (int i = 0; i < loop; i++) {System.out.println("Hello " + name + " , " + content);}}
}

1.5 创建自动配置类

添加@Configuration@EnableConfigurationProperties注解,导入对应的属性类。

package com.wyw.hellospringbootstarter.config;import com.wyw.hellospringbootstarter.property.HelloProperties;
import com.wyw.hellospringbootstarter.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author name:    silk* @version 1.0* @description: 自动装配类* @date 2024/6/6 21:36*/
@Configuration
@EnableConfigurationProperties(HelloProperties.class)
public class HelloAutoConfiguration {@Autowiredprivate final HelloProperties helloProperties;@Beanpublic HelloService helloService() {return new HelloService(helloProperties.getName(), helloProperties.getContent(), helloProperties.getLoop());}
}

1.6 META-INF/spring.factories中配置上自动装配类

org.springframework.boot.autoconfigure.EnableAutoConfiguration =\
com.wyw.hellospringbootstarter.config.HelloAutoConfiguration

1.7 Maven打包到本地仓库

maven clean
maven install

2. 项目中导入Starter,验证

2.1 导入Starter依赖

<!--导入自定义starter--><dependency><groupId>com.wyw</groupId><artifactId>hello-spring-boot-starter</artifactId><version>0.0.1-SNAPSHOT</version></dependency>

2.2 写配置文件

com:wyw:hello:name: xiaoWang	# 顾客姓名content: you are a member user, and our store will give you two 20 yuan discount coupons.	# 欢迎语loop: 3	# 欢迎语次数

2.3 注入服务类,验证

通过@AutowiredHelloService实例化。

package com.wyw.learn.diystarter;import com.wyw.hellospringbootstarter.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author name:    silk* @version 1.0* @description: TODO* @date 2024/6/6 21:49*/
@RestController
@RequestMapping("/diystarter")
public class DiyHelloStarterTest {@Autowiredprivate HelloService helloService;@GetMapping("/hello")public void sayHello() {helloService.sayHello();}
}

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java小游戏-坦克大战1.0

文章目录 游戏界面样式游戏需求分析设计类过程1&#xff1a;初始化界面过程2&#xff1a;用面向对象思想设置功能过程3&#xff1a;调用类实例化对象过程4&#xff1a;联合调试 项目代码下载&#xff1a; CSDN_java小游戏-坦克大战1.0 来源&#xff1a;该游戏来自尚学堂~&…

企业在现代市场中的战略:通过数据可视化提升财务决策

新时代&#xff0c;财务规划团队不仅仅是企业内部的一个部门&#xff0c;更是帮助企业做出明智决策和设定战略目标的中坚力量。在当今瞬息万变的商业环境中&#xff0c;财务专业人士需要具备应对挑战并引导企业走向成功的角色职能。企业领导者时常面临着数据压力&#xff0c;需…

OpenCV的“画笔”功能

类似于画图软件的自由笔刷功能&#xff0c;当按住鼠标左键&#xff0c;在屏幕上画出连续的线条。 定义函数&#xff1a; import cv2 import numpy as np# 初始化参数 drawing False # 鼠标左键按下时为True ix, iy -1, -1 # 鼠标初始位置# 鼠标回调函数 def mouse_paint(…

五个超实用的 ChatGPT-4o 提示词

GPT-4o 是 OpenAI 最近推出的最新人工智能模型&#xff0c;不仅具备大语言模型的能力&#xff0c;而且拥有多模态模型的看、读、说等能力&#xff0c;而且速度比 GPT-4 更快。下面我们就来介绍几个超实用的 GPT-4o 提示词&#xff0c;帮助大家更好地了解 GPT-4o 的功能和应用场…

Android 动态修改APP图标

文章目录 Android 动态修改APP图标定义activity-alias修改图标和App名监听APP前后台状态切换进入后台时切换修改图标和名字缺点 Android 动态修改APP图标 修改前&#xff1a; 修改后&#xff1a; 定义activity-alias 在 AndroidManifest.xml 中设置 activity-alias&#xff1…

RTA_OS基础功能讲解 2.8-Tick计数器

RTA_OS基础功能讲解 2.8-Tick计数器 文章目录 RTA_OS基础功能讲解 2.8-Tick计数器一、计数器简介二、计数器配置三、计数器驱动3.1 软件计数器驱动3.1.1 递增软件计数器3.1.2 静态计数器接口3.2 硬件计数器驱动3.2.1 Advancing硬件计数器3.2.2 回调函数四、在运行时访问计数器属…

JVM之【类的生命周期】

首先&#xff0c;请区分Bean的声明周期和类的声明周期。此处讲的是类的声明周期 可以同步观看另一篇文章JVM之【类加载机制】 概述 在Java中数据类型分为基本数据类型和引用数据类型 基本数据类型由虚拟机预先定义&#xff0c;引用数据类型则需要进行类的加载 按照]ava虚拟机…

AI大模型日报#0606:智谱AI开源GLM-4-9B、Pika再融5.8亿

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一万物”&#xff08;Yi-Large&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xf…

C++构造器设计模式

构造器模式可以简化复杂对象或一系列对象的构造过程&#xff0c;从而单独定义构成该复杂对象的各个组件的构建方法。 这篇文章只讲解较为简单的构造器的创建。创建一个构造器我们得了解如何实现流式调用以及如何关闭外界的访问权对构造函数的访问权限。 流式调用 所谓流式调…

【Linux】进程切换环境变量

目录 一.进程切换 1.进程特性 2.进程切换 1.进程切换的现象 2.如何实现 3.现实例子 2.环境变量 一.基本概念 二.常见环境变量 三.查询常见环境变量的方法 四.和环境变量相关的命令 五.环境变量表的组织方式 六.使用系统调用接口方式查询环境变量 1.getenv 2.反思 …

【简单讲解下TalkingData】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Signac|成年小鼠大脑 单细胞ATAC分析(1)

引言 在本教程中&#xff0c;我们将探讨由10x Genomics公司提供的成年小鼠大脑细胞的单细胞ATAC-seq数据集。本教程中使用的所有相关文件均可在10x Genomics官方网站上获取。 本教程复现了之前在人类外周血单核细胞&#xff08;PBMC&#xff09;的Signac入门教程中执行的命令。…

100道大模型面试八股文

算法暑期实习机会快结束了&#xff0c;校招大考即将来袭。 当前就业环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;岗位在变少&#xff0c;要求还更高了。 最近&#xff0c;我们陆续整理了很多大厂的面试题&#xff0c;帮助球友解惑答疑和职业规划&#xff0c;分…

【Python报错】已解决ModuleNotFoundError: No Module Named ‘openyxl’

成功解决“ModuleNotFoundError: No Module Named ‘openyxl’”错误的全面指南 在Python编程中&#xff0c;遇到ModuleNotFoundError: No Module Named openyxl这样的错误通常意味着Python解释器无法找到名为openyxl的模块。然而&#xff0c;这里存在一个常见的拼写错误&#…

javascript中的flat和faltmap的区别

JavaScript 中的 flat 和 flatMap 是数组方法&#xff0c;它们用于处理嵌套数组&#xff08;即数组中的元素也是数组&#xff09;。下面是它们的区别&#xff1a; flat 方法: flat 方法用于将嵌套数组“展平”成一个新数组&#xff0c;但不会改变原始数组。它接受一个可选的深…

Anaconda 环境管理的一些特殊操作

在指定位置创建虚拟环境 第一步&#xff1a;在现有/your/paht/目录创建env_name的环境变量 conda create -p /your/paht/env_name python3.x第二步&#xff1a;通过一下命令发现环境变量没有名字&#xff1a; conda env list第三步&#xff1a;将/your/paht/ 加入到conda 的en…

资源描述框架的用途及实际应用解析

什么是RDF&#xff1f; RDF代表 资源描述框架 RDF是用于描述网络资源的框架 RDF旨在被计算机阅读和理解 RDF并非设计用于供人阅读 RDF以 XML 编写 示例 描述购物商品的属性&#xff0c;如价格和可用性描述网络活动的时间表描述网页的信息&#xff08;内容&#xff0c;作者&a…

使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现

在分布式系统架构日益流行的今天&#xff0c;服务配置管理和发现成为了开发和运维团队面临的重大挑战。Nacos&#xff0c;作为阿里巴巴开源的一款强大的动态配置管理与服务发现平台&#xff0c;为解决这一难题提供了有效方案。本文将介绍如何在C# (.NET Core)应用程序中集成Nac…

springboot,配置类加载过程

加载过程 首先来看启动类&#xff0c;启动类上包含了SpringBootApplication注解 SpringBootApplication MapperScan("com.cskaoyan.mapper") public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);…

后端开发面经系列 --中望C++面经

中望C面经&#xff0c;全部内容&#xff01; 公众号&#xff1a;阿Q技术站 文章目录 中望C面经&#xff0c;全部内容&#xff01;一面 8.15 时长45min1、介绍项目相关2、gdb怎么调试的&#xff1f;打断点用什么指令&#xff1f;3、gcc的编译过程4、cmake添加头文件搜索路径用…