Java 后端标准目录结构

在开发 Java 后端应用程序时,遵循一种合理的目录结构是至关重要的。这种标准的目录结构可以提供清晰的项目结构,使得代码的组织和维护变得更加容易。本文将介绍一种常见的 Java 后端标准目录结构,并提供相应的代码示例。

目录结构

下面是一种常见的 Java 后端标准目录结构:

└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           ├── controller
    │   │           │   └── UserController.java
    │   │           ├── service
    │   │           │   └── UserService.java
    │   │           ├── repository
    │   │           │   └── UserRepository.java
    │   │           ├── model
    │   │           │   └── User.java
    │   │           └── Application.java
    │   └── resources
    │       ├── static
    │       ├── templates
    │       └── application.properties
    └── test
        └── java
            └── com
                └── example
                    ├── controller
                    │   └── UserControllerTest.java
                    ├── service
                    │   └── UserServiceTest.java
                    └── repository
                        └── UserRepositoryTest.java

这个目录结构主要分为三个部分:src/mainsrc/testsrc/main/resources。其中,src/main 目录用于存放主要的源代码,src/test 目录用于存放测试代码,src/main/resources 目录用于存放资源文件。

src/main/java 目录下,我们可以按照功能模块或业务逻辑进行包的划分,例如 com.example.controller 用于存放控制器类,com.example.service 用于存放服务类,com.example.repository 用于存放数据访问类,com.example.model 用于存放实体类等。

src/main/resources 目录下,我们可以存放一些静态资源文件和配置文件。例如,static 目录可以用于存放前端静态资源,templates 目录可以用于存放模板文件,application.properties 则是 Spring Boot 应用程序的配置文件。

src/test/java 目录下,我们可以按照与 src/main/java 目录相同的结构组织测试代码。例如,com.example.controller 用于存放控制器类的测试代码,com.example.service 用于存放服务类的测试代码,com.example.repository 用于存放数据访问类的测试代码。

代码示例

下面是一个简单的示例来说明如何使用这种标准目录结构。假设我们要开发一个用户管理系统,具有用户注册、登录和查看用户信息的功能。

首先,我们需要创建一个 UserController 类,用于处理用户相关的请求:

package com.example.controller;

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {

    @PostMapping("/register")
    public String register(@RequestBody User user) {
        // 处理用户注册逻辑
        return "注册成功";
    }

    @PostMapping("/login")
    public String login(@RequestBody User user) {
        // 处理用户登录逻辑
        return "登录成功";
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable("id") Long id) {
        // 根据用户 ID 查询用户信息
        return userRepository.findById(id);
    }
}

然后,我们需要创建一个 UserService 类,用于处理与用户相关的业务逻辑:

package com.example.service;

import org.springframework.stereotype.Service;

@Service
public class UserService {

    public void register(User user) {
        // 处理用户注册逻辑
    }

    public void login(User user) {
        // 处理用户登录逻辑
    }

    public User getUser(Long id) {
        // 根据用户 ID 查询用户信息
        return userRepository.findById(id);
    }
}

接下来,我们需要创建一个 UserRepository 类,用于与数据库进行数据访问:

package com.example.repository;

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {

    User findById(Long id);