当前位置: 首页 > news >正文

SpringBoot自定义配置实战原理深层解析

整理一下今天学习的一个知识点:在项目中自定义的config包中的配置文件如何发挥作用?

首先从Spring Boot应用启动过程讲解,主要分为以下几步:

1.从主应用类开始,扫描@SpringBootApplication注解指定的基础包
2.递归扫描所有子包中的组件
3.发现带有@Configuration、@Component、@Service、@Repository、@Controller等注解的类
4.创建这些类的实例并注册到Spring容器中
5.执行配置类中的@Bean方法,创建相应的Bean实例
6.应用各种配置,spring在没有自定义配置时会自动生成默认的对应配置(如拦截器等),如果  有,则会使用自定义配置的Bean示例

以我目前的项目为例:

package com.teacup.teacuppicturebackend.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@MapperScan("com.teacup.teacuppicturebackend.mapper")
public class MybatisPlusConfig {/*** 拦截器配置** @return {@link MybatisPlusInterceptor}*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

由图可知,这是一个MybatisPlus配置类,根据这个配置类讲解的话,可以这样理解:

步骤1:Spring启动时的Bean注册

Spring启动 → 扫描配置类 → 发现MybatisPlusConfig中的@Bean方法 → 注册mybatisPlusInterceptor Bean

步骤2:MyBatis Plus集成

MyBatis Plus自动配置 → 检查是否已存在MybatisPlusInterceptor类型的Bean → 发现已存在 → 使用自定义Bean而不是创建默认的

步骤3:拦截器生效

执行Mapper方法 → MyBatis执行流程 → MybatisPlusInterceptor拦截 → 执行分页等插件逻辑

eg:

场景:在service层中要执行分页查询

Page<User> userPage = userService.page(new Page<>(current, pageSize), queryWrapper);

执行流程如下:


1.调用MyBatis Plus的page方法
2.触发MyBatis执行流程
3.Spring将之前注册的自定义MybatisPlusInterceptor应用到执行过程中
4.拦截器处理分页逻辑,改写SQL语句
5.执行改写后的SQL并返回结果

如果你想验证是否使用了自定义的拦截器,可以在拦截器中增加日志输出语句。

http://www.dtcms.com/a/389911.html

相关文章:

  • cef:浏览器和渲染
  • EasyClick JavaScript 函数
  • Qt QSplineSeries详解
  • 扩散模型简介
  • [答疑]SysML模型的BDD中加了新的端口,怎样同步到IBD
  • MySQL 专题(二):索引原理与优化
  • 【脑电分析系列】第17篇:EEG特征提取与降维进阶 — 主成分分析、判别分析与黎曼几何
  • NVIDIA DOCA 环境产品使用与体验报告
  • C# Windows Service 中添加 log4net 的详细教程
  • 用 pymupdf4llm 打造 PDF → Markdown 的高效 LLM 数据管道(附实战对比)
  • 机械设备钢材建材网站 网站模版
  • Mysql8 SQLSTATE[42000] sql_mode=only_full_group_by错误解决办法
  • 【第五章:计算机视觉-项目实战之图像分类实战】2.图像分类实战-(3)批量归一化(Batch Normalization)和权重初始化的重要性
  • SQL Server 多用户读写随机超时?从问题分析到根治方案
  • 2.css的继承性,层叠性,优先级
  • OpenStack 学习笔记(四):编排管理与存储管理实践(上)
  • list_for_each_entry 详解
  • Perplexity AI Agent原生浏览器Comet
  • 颈椎按摩器方案开发,智能按摩仪方案设计
  • Sui 学习日志 1
  • 六、Java—IO流
  • 数据库 事务隔离级别 深入理解数据库事务隔离级别:脏读、不可重复读、幻读与串行化
  • 从“纸面”到“人本”:劳务合同管理的数字化蜕变
  • ARM架构——学习时钟7.2
  • VS Code 调试配置详解:占位符与语言差异
  • 锁 相关知识总结
  • caffeine 发生缓存内容被修改以及解决方案-深度克隆
  • rust编写web服务06-JWT身份认证
  • 《怪猎:荒野》制作人:PC平台对日本游戏非常重要
  • 大模型训练框架(二)FSDP