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

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 {
        @Bean
        public 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> {
        @Override
        public 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 {
        @Override
        public 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:监听应用生命周期事件

你可能感兴趣的:(Java,学习,笔记,spring,boot)