Spring学习笔记03——Spring Boot的文件结构

server/2025/3/5 1:14:55/

Spring boot常见的文件结构:

src/
├── main/
│   ├── java/
│   │   └── com.example.demo/
│   │       ├── DemoApplication.java    # 主入口
│   │       ├── config/                 # 配置类
│   │       ├── controller/             # 控制器
│   │       ├── service/                # 业务逻辑
│   │       ├── mapper/                 # 数据库操作接口
│   │       ├── entity/                 # 数据库实体类
│   │       ├── dto/                    # 数据传输对象
│   │       ├── listener/               # 监听器
│   │       └── interceptor/            # 拦截器
│   └── resources/
│       ├── application.yml             # 全局配置
│       └── mapper/                     # MyBatis 的 XML 文件
└── test/                               # 测试代码

1. config(配置文件夹)

  • 作用:像「工具箱的说明书」,存放各种配置类。
  • 常见内容
    • 数据库连接配置
    • 第三方工具(如Redis、Swagger)的配置
    • 自定义规则(比如日期格式、安全规则)
  • 示例
    @Configuration
    public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate() {// 配置 Redis 连接return new RedisTemplate<>();}
    }
    

2. mapper(数据映射文件夹)

  • 作用:像「翻译官」,负责将 Java 对象和数据库表互相转换。
  • 常见技术:MyBatis 或 JPA 的数据库操作接口。
  • 示例
    @Mapper // 告诉 MyBatis:这是操作数据库的接口
    public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User findById(int id);
    }
    

3. listener(监听器文件夹)

  • 作用:像「耳朵」,监听应用中的事件(比如应用启动、关闭)。
  • 常见用途
    • 应用启动时初始化数据
    • 统计在线人数
  • 示例
    @Component
    public class MyListener implements ApplicationListener<ContextRefreshedEvent> {@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {System.out.println("应用启动了!");}
    }
    

4. entity(实体文件夹)

  • 作用:像「数据库的镜子」,直接对应数据库表的字段。
  • 特点:纯数据类,通常和数据库表一一对应。
  • 示例
    @Data // Lombok 自动生成 getter/setter
    public class User {private Long id;private String name;private Integer age;
    }
    

5. dto(数据传输对象文件夹)

  • 作用:像「快递盒」,专门用于在不同层之间传递数据。
  • 场景:比如前端需要的字段和数据库实体不同,可以用 DTO 转换。
  • 示例
    @Data
    public class UserDTO {private String username;private String email; // 数据库实体没有 email 字段,但前端需要
    }
    

6. interceptor(拦截器文件夹)

  • 作用:像「安检员」,在请求到达 Controller 前/后做检查或处理。
  • 常见用途
    • 登录验证(检查是否有 Token)
    • 记录请求日志
  • 示例
    public class AuthInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 检查用户是否登录return true; // 放行请求}
    }
    

7.bean 文件夹(或包)

作用:像「零件仓库」,存放被 Spring 管理的对象(Bean)的定义,尤其是那些不属于传统分层(如 Controller/Service)的组件。

常见内容:

自定义配置类(比如第三方工具需要的 Bean)

工具类 Bean(比如日期转换器、加密工具)

全局共享的组件(比如自定义异常处理器)

示例:

// 假设在 bean 包下定义一个加密工具 Bean
@Component // 标记为 Bean
public class EncryptUtils {public String encrypt(String data) {// 实现加密逻辑return "加密后的数据";}
}

8.common 文件夹(或包)

作用:像「公共工具箱」,存放全项目通用的代码,不依赖具体业务逻辑。

常见内容:

工具类(如日期处理、字符串处理)

常量类(如错误码、固定配置)

自定义异常类(如 BusinessException)

通用返回对象(如统一格式的 API 响应类)

公共配置(如全局异常处理器)

示例:

// 在 common 包下定义一个统一响应格式
@Data
public class ApiResponse<T> {private int code;private String message;private T data;public static <T> ApiResponse<T> success(T data) {ApiResponse<T> response = new ApiResponse<>();response.setCode(200);response.setMessage("成功");response.setData(data);return response;}
}

对比其他文件夹
文件夹 类比 核心区别
bean 特殊零件库 存放非分层专用的 Spring Bean
common 共享工具箱 存放与业务无关的通用代码
config 说明书 专门配置 Bean 和第三方工具

其他核心文件夹回顾

文件夹作用比喻示例内容
controller服务员(处理 HTTP 请求)UserController
service厨师(处理业务逻辑)UserService
repository仓库管理员(操作数据库)UserRepository
主入口(Main)大门(启动程序)SpringApplication.run()

为什么需要这么多文件夹?

  1. 职责分离:就像餐厅分工(厨师、服务员、采购员),不同代码做不同事。
  2. 易于维护:修改数据库操作不用动业务逻辑代码。
  3. 团队协作:后端开发可以专注 service,前端联调看 dto

总结一句话

  • entity:直接对应数据库表
  • dto:给前端看的“包装版”数据
  • mapper:操作数据库的接口
  • config:配置第三方工具
  • interceptor:拦截请求做检查
  • listener:监听应用生命周期事件

http://www.ppmy.cn/server/172476.html

相关文章

Switch开关的防抖监听器

一、这代码到底解决了什么问题&#xff1f;&#xff08;先唠点实在的&#xff09; 作为一个在安卓坑里摸爬滚打多年的老码农&#xff0c;肯定都遇到过这种场景&#xff1a;用户疯狂点击Switch开关&#xff0c;结果触发一堆重复回调。这种防抖需求就跟吃饭喝水一样常见。传统实…

腾讯云对象存储服务(COS)

腾讯云对象存储服务&#xff08;COS&#xff09; 安全、可扩展、低成本的云存储解决方案 腾讯云 对象存储服务&#xff08;COS&#xff0c;Cloud Object Storage&#xff09; 是一种高可靠、高性能、可扩展的云存储服务&#xff0c;专为海量非结构化数据&#xff08;如图片、…

思维链 Chain-of-Thought Prompting

论文: Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (Wei et al., 2022) 核心贡献: 首次提出通过显式的中间推理步骤&#xff08;即思维链&#xff09;提升大语言模型的复杂推理能力。该方法通过示例展示多步推理过程&#xff0c;引导模型生成逻辑…

【QT网络问题】关于QT在调用天气等类似api接口时报错

报错内容 qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed Error: "TLS initialization failed"问题原因 Openssl库不匹配或者未安装&#xff0c;可以通过qdebug版本打印当前所需要的的openssl库&#xff0c;自己去官网下载 qDeb…

【零基础C语言】第四节 数组

【零基础C语言系列】 【零基础C语言】第一节 C语言概述【数制进制码制】-CSDN博客 【零基础C语言】第二节 数据类型、运算符、表达式-CSDN博客 【零基础C语言】第三节 控制结构-CSDN博客 一、一维数组

第 三十九:作用域插槽 v-solt 和 solt 对应的作用域

3. 作用域插槽 理解&#xff1a;数据在组件的自身&#xff0c;但根据数据生成的结构需要组件的使用者来决定。&#xff08;新闻数据在News组件中&#xff0c;但使用数据所遍历出来的结构由App组件决定&#xff09; 具体编码&#xff1a; 父组件中&#xff1a;<Game v-slot&…

Windows提权之第三方提权(九)

除了系统自带的服务外 &#xff0c;安装第三方的软件例如 mysql sqlserver ftp等应用软件&#xff0c;如果权限设置不对&#xff0c; 会对服务器造成安全隐患&#xff0c;从而导致服务器被提权。 一.sqlserver提权 1.描述 如果网站里面使用的数据库是sqlserver 那么如果找到s…

解决双系统开机显示gnu grub version 2.06 Minimal BASH Like Line Editing is Supported

找了好多教程都没有用&#xff0c;终于解决了&#xff01;&#xff01;我是因为ubuntu分区的时候出问题了 问题描述&#xff1a; 双系统装好&#xff0c;隔天开机找不到引导项&#xff0c;黑屏显示下列 因为我用的D盘划分出来的部分空闲空间&#xff0c;而不是全部&#xff0c…