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

devtools/2025/3/5 2:24:36/

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/devtools/164629.html

相关文章

【Qt】MVC设计模式

目录 一、搭建MVC框架 二、创建数据库连接单例类SingleDB 三、数据库业务操作类model设计 四、control层&#xff0c;关于model管理类设计 五、view层即为窗口UI类 一、搭建MVC框架 里面的bin、lib、database文件夹以及sqlite3.h与工程后缀为.pro文件的配置与上次发的文章…

R 语言科研绘图第 26 期 --- 密度图-基础

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

P7使用pytorch实现马铃薯病害识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 我的环境 语言环境&#xff1a;python 3.7.12 编译器&#xff1a;pycharm 深度学习环境&#xff1a;tensorflow 2.7.0 数据&#xff1a;本地数据集 这次我们使…

C# Unity 唐老狮 No.3 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…

【PHP】fastadmin中对addons进行路由重写

文章目录 概要技术细节 概要 公司的项目中使用了一个addons的cms插件&#xff0c;要求在这个插件的基础上做二次开发&#xff0c;新加了页面&#xff0c;发现url路径太难看了&#xff0c;默认是 addons/cms/index/calendar&#xff0c;想优化一下&#xff0c;但通过deepseek的…

【go语言】——方法集

在 Go 语言中&#xff0c;方法集&#xff08;method set&#xff09;是指与某个类型&#xff08;无论是值类型还是指针类型&#xff09;相关联的方法的集合。 1.值类型的实例与方法集 值类型的实例具有方法集&#xff0c;这些方法集只包含 值接收者 方法。你可以对值类型实例…

计算机毕业设计SpringBoot+Vue.js相亲网站(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

关于常规模式下运行VScode无法正确执行“pwsh”问题

前言&#xff1a; pwsh在系统环境中正确配置&#xff0c;且可以运行在cmd&#xff0c; powshell&#xff08;5.1&#xff09;--- 都需要在管理员权限下运行 &#xff08;打开setting&#xff09; 打开setting.json &#xff08;在vscode中添加 powershell 7 路径&…