手写starter核心思路流程-全网最详细版本

全网最详细手写starter组件教程

那么在写这篇博客之前,先问一下大家为什么要写starter组件,仅仅只是为了炫技吗?还是真正的在业务中需要.在现在的开发环境下,什么是竞争力? 举例分页查询来说,每个来公司的程序员都有一套自己写分页的流程,但是这套流程基本上都是重复的,那么我们可以将这套流程简化吗?明确的说可以,那么我们就只写写一个starter组件,这个组件写入之后,在springboot项目中只需要导入这个组件依赖,那么可以给想给的业务进行分页,而不需要写分页代码,这就是核心竞争力,这就是值钱的地方

在这里插入图片描述类似上面只需要加一个注解,那么这个功能分页就直接写好了,我们不用写分页组件

文章目录

  • 全网最详细手写starter组件教程
  • 那么在写这篇博客之前,先问一下大家为什么要写starter组件,仅仅只是为了炫技吗?还是真正的在业务中需要.在现在的开发环境下,什么是竞争力? 举例分页查询来说,每个来公司的程序员都有一套自己写分页的流程,但是这套流程基本上都是重复的,那么我们可以将这套流程简化吗?明确的说可以,那么我们就只写写一个starter组件,这个组件写入之后,在springboot项目中只需要导入这个组件依赖,那么可以给想给的业务进行分页,而不需要写分页代码,,,这就是核心竞争力,这就是值钱的地方
  • 下面我就带领大家去写一个starter组件,我们去剖析这个组件,这个组件是我们自定义的,所以就是自定义组件的书写,但是要与业务契合
  • 第一步新建工程
    • 首先父工程是写的以parent为结尾的
    • 然后记得打包为pom方式
    • 开发web项目需要引入spring-boot-starter-web依赖
  • 那么就开始写第一个分页的接口
    • 先定义一个接口


下面我就带领大家去写一个starter组件,我们去剖析这个组件,这个组件是我们自定义的,所以就是自定义组件的书写,但是要与业务契合

对于组件的书写,我们不能一上来就直接写组件,而是基于原本的业务代码去拆分,去提取,首先我先给你们一个分页的业务代码:
算了还是带大家一起写一个工程,从而再拆分,我说了这是全网最详细的手写starter教程

第一步新建工程

首先我们新建一个springboot项目

可以直接使用启动器新建springboot项目

在这里插入图片描述

然后点击next下一步

在这里插入图片描述
然后选择springboot的版本,然后还有所需依赖版本

然后点击创建

新建工程后只留需要的依赖

在这里插入图片描述

坐标是需要的其他的可以删除

然后需要写一下父工程

要标记这个是springboot项目 可以使用标签写

在这里插入图片描述

首先父工程是写的以parent为结尾的

然后记得打包为pom方式

在这里插入图片描述

依赖有两个依赖写在父工程

开发web项目需要引入spring-boot-starter-web依赖

然后可以开发接口

首先根据数据库的进行书写实体类的信息,可以加入lombok的组件

在这里插入图片描述
三层架构先建好

然后我们就配置数据库的yml文件

在这里插入图片描述

然后运行

运行成功,说明没有错误

那么就开始写第一个分页的接口

先定义一个接口

package com.healer.controller;import com.healer.model.pojo.Emp;
import com.healer.model.vo.common.Result;
import com.healer.model.vo.common.ResultCodeEnum;
import com.healer.service.EmpService;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @author healer* @Description EmpController* @data 2024-07-03 20:27*/
@RestController
@RequestMapping("/api/emp")
public class EmpController {@Autowiredprivate EmpService empService;@GetMappingpublic Result<List<Emp>> selectEmp(@RequestParam("pageNum") Integer pageNum, @RequestParam("pageSize") Integer pageSize) {List<Emp> empList = empService.selectEmp(pageNum, pageSize);return Result.build(empList, ResultCodeEnum.SUCCESS);}
}

service层

首先我们先用分页插件pagehelper做,然后再拆分为starter组件

使用pagehelper首先要引入依赖
直接编写代码

在这里插入图片描述
在这里插入图片描述

那么如果多个接口写分页的话,那么代码就是重复的代码代码的重复,复用,
所以我们可以写一个分页的starter组件,只要引入我们的组件那么只需要在方法上面加注解那么就,直接完成了分页,简化开发流程

简化代码

那么就先了解

首先启动器有core
在Spring Boot Starter组件中,core通常指的是核心启动器(spring-boot-starter),它包含了Spring Boot应用程序所需的基础设施。core的主要作用是提供自动配置、日志和YAML等基础支持

在这里插入图片描述
在core里面可以去自定义的注解

用于整理

那么分页就是 使用PageX去代表

使用这个注解

在这里插入图片描述
这个就是注解

上面三个是元注解没有特殊含义

注解声明完后可以写starter

首先这个分页是基于aop去做,基于aop去实现分页

那么开始写组件
首先新建工程

组件的group尽量使用cn 不要使用com 因为组件的包可以会与你项目中的包重名,那么可以就是导致自动配置的开关失效

在这里插入图片描述

这个是父工程

父工程中的pom文件要修改

父工程要写依赖管理
管理子工程中所以的依赖然后控制版本号

<?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><groupId>cncs.smart</groupId><artifactId>smartces-root</artifactId><version>0.0.1-SNAPSHOT</version><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.3.12.RELEASE</version><relativePath/></parent><packaging>pom</packaging><dependencyManagement><dependencies><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.2</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26</version></dependency></dependencies></dependencyManagement><properties><java.version>1.8</java.version></properties></project>

在这里插入图片描述
子工程新建完毕

首先要写自动配置

在这里插入图片描述
最重要的就是在resource下面新建一个META-INF的文件夹然后再写一个spring.factories的文件里面就配置自动配置的信息

当你不知道要引入那个包去实现依赖的使用可以,点进去
在这里插入图片描述
那么直接引入就可以使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

切点使用注解的方式,那么可以在core中写注解

那么就需要进入注解core核心

在这里插入图片描述
这个是域名信息,
在这里插入图片描述

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

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

相关文章

Docker学习笔记(一)概念理解

一、什么是docker容器 Docker容器是一种轻量级、可移植的软件封装技术&#xff0c;它允许开发者将应用程序及其依赖、配置文件、运行环境等打包到一个独立的、自包含的执行单元中。容器与虚拟机相似&#xff0c;都提供了隔离的运行环境&#xff0c;但容器更加轻量级&#xff0c…

如何清理电脑内存?让电脑运行如飞!

电脑内存&#xff08;RAM&#xff09;的清理对于维持系统的流畅运行至关重要。随着使用时间的增加&#xff0c;系统内存会被各种应用程序和后台进程占用&#xff0c;导致系统响应变慢&#xff0c;甚至出现卡顿现象。通过有效地清理内存&#xff0c;可以提升电脑的性能&#xff…

深入理解如何撤销 Git 中不想提交的文件

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

MySQL内存使用率高且不释放问题排查与总结

背景 生产环境mysql 5.7内存占用超过90%以上&#xff0c;且一直下不来。截图如下&#xff1a; 原因分析 1、确定mysql具体的占用内存大小&#xff0c;通过命令&#xff1a;cat /proc/Mysql进程ID/status查看 命令执行后的结果比较多&#xff08;其他参数的含义想了解可参考这…

静态路由的配置

5.3静态路由 静态路由由网络管理员手动配置&#xff0c;配置方便&#xff0c;对系统要求低&#xff0c;适用于拓扑结构简单并且稳定的小型网络。缺点是不能自动适应网络拓扑的变化&#xff0c;需要人工干预。 5.3.1静态路由实验 1、实验需求 ① 掌握路由表的概念&#xff1…

cpp随笔——如何实现一个简单的进程心跳功能

什么是进程的心跳 在我们日常后台服务程序运行中,一般是调度模块&#xff0c;进程心跳以及进程监控共同工作&#xff0c;进而实现实现服务的稳定运行,在前面我们介绍过如何去实现一个简单的调度模块,而今天我们所要介绍的就是如何实现进程的心跳&#xff0c;首先什么是进程的心…

git上传文件

git init git add . git commit -m " " git remote add origin 仓库的地址 git push -u origin master 如果出现以下问题 可以用这一句强制上传 git push -f origin master

Centos下rpm和yum执行卡住问题(已解决)

问题描述 执行rpm和yum卡住&#xff0c; 没有任何报错信息&#xff0c;且无法 ctrl c 终止&#xff0c;只能通过后台 kill -9 杀死。 问题排查&#xff1a; 查看yum日志&#xff1a;yum -vv 软件包 会发现卡在 loading keyring from rpmdb&#xff0c;即load DB存在问题。 …

使用 llamaIndex 快速实现智能体

AI 智能体就是可以根据当前环境进行推理&#xff0c;并根据处理结果进行下一步的操作。简单来说 AI 智能体可以与外界环境进行交互&#xff0c;并根据结果执行更复杂的操作。本文将通过llamaIndex 实现一个简单的 Agent 实时获取数据&#xff0c;由于大模型是通过静态数据进行训…

收银系统源码分享-PHP可二开

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 私有化独立…

游戏工作室如何巧妙应对IP封禁风险?

游戏工作室在使用IP时&#xff0c;面临着封号的风险&#xff0c;因此需要采取一些防封技巧来保护自己的运营。以下是一些游戏工作室常用的防封技巧。 1. 多IP轮换 游戏工作室可以使用多个代理IP&#xff0c;并定期轮换它们。这样做可以减少单个IP被频繁访问同一游戏服务器而被…

C++_03

1、构造函数 1.1 什么是构造函数 类的构造函数是类的一种特殊的成员函数&#xff0c;它会在每次创建类的新对象时执行。 每次构造的是构造成员变量的初始化值&#xff0c;内存空间等。 构造函数的名称与类的名称是完全相同的&#xff0c;并且不会返回任何类型&#xff0c;也不…

Windows系统安装SSH服务结合内网穿透配置公网地址远程ssh连接

前言 在当今的数字化转型时代&#xff0c;远程连接和管理计算机已成为日常工作中不可或缺的一部分。对于 Windows 用户而言&#xff0c;SSH&#xff08;Secure Shell&#xff09;协议提供了一种安全、高效的远程访问和命令执行方式。SSH 不仅提供了加密的通信通道&#xff0c;…

路由的高级用法

多级路由 1.新建一个Mian组件 <template><div> <h1>我是Msg的子组件</h1></div> </template><script> export default {name: "Mian", } </script><style> </style> 2.在router中msg小新建一个路由 imp…

Canvas合集更更更之实现由画布中心向外随机不断发散的粒子效果

实现效果 1.支持颜色设置 2.支持粒子数量设置 3.支持粒子大小设置 写在最后&#x1f352; 源码&#xff0c;关注&#x1f365;苏苏的bug&#xff0c;&#x1f361;苏苏的github&#xff0c;&#x1f36a;苏苏的码云

实验九 存储过程和触发器

题目 创建并执行一个无参数的存储过程proc_product1&#xff0c;通过该存储过程可以查询商品类别名称为“笔记本电脑”的商品的详细信息&#xff1a;包括商品编号、商品名称、品牌、库存量、单价和上架时间信息 2、创建并执行一个带输入参数的存储过程proc_product2&#xff…

【软件测试】Postman接口测试基本操作

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 Postman-获取验证码 需求&#xff1a;使用Postman访问验证码接口&#xff0c;并查看响应结果…

图书管理系统(持久化存储数据以及增添新功能)

目录 一、数据库表设计 二、引入MyBatis 和MySQL 驱动依赖 三、配置数据库 & 日志 四、Model创建 五、枚举类 常量类用户登录 六、用户登录 七、添加图书 八、图书列表 九、修改图书 十、删除图书 十一、批量删除 十二、强制登录 十三、前端代码 &#xff0…

AI与测试相辅相成

AI助力软件测试 1.AI赋能软件测试 使用AI工具来帮助测试人员提高测试效率&#xff0c;提供缺陷分析和缺陷预测。 语法格式 设定角色 具体指示 上下文格式 例: 角色&#xff1a;你是一个测试人员 内容&#xff1a;请帮我生成登录案例的测试用例 ​ 1.只有输入正确账号和密码才…

生命在于学习——Python人工智能原理(3.2.1)

二、随机变量 2.1 随机变量及其分布 &#xff08;一&#xff09;基本概念 定义1 随机变量 随机变量表示随机试验各种结果的实值单值函数&#xff0c;即能用数学分析方法来研究随机现象&#xff0c;例如某一时间内公共汽车站等车的乘客人数、淘宝在一定时间内的交易次数等&am…