SpringBoot 项目子文件夹简介
这些子文件夹(包)在 Spring Boot 项目中通常用于组织和管理不同的功能和组件
config
包含应用程序的配置类,例如数据库、安全性、缓存等等。这些配置类可通过 @Configuration
注释进行标识。
@Configuration
public class DatabaseConfig {
@Bean
public DataSource dataSource() {
// 配置数据源
return new DataSource();
}
}
constant
包含常量定义,例如错误代码、HTTP 状态码、应用程序配置等。这些常量通常由静态常量或枚举类定义。
public final class ErrorCode {
public static final int INTERNAL_SERVER_ERROR = 500;
public static final int BAD_REQUEST = 400;
// ...
}
controller
包含控制器类,处理来自客户端的 HTTP 请求,并将响应发送回客户端。这些控制器类通常由 @Controller
或 @RestController
注释进行标识。
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public UserDTO getUserById(@PathVariable Long id) {
User user = userService.getUserById(id);
return UserDTO.from(user);
}
}
dto
包含数据传输对象(Data Transfer Object)类,用于在控制器和服务层之间传递数据。这些类通常用于请求和响应的数据传输和转换。
public class UserDTO {
private Long id;
private String username;
private String email;
// ...
public static UserDTO from(User user) {
UserDTO dto = new UserDTO();
dto.setId(user.getId());
dto.setUsername(user.getUsername());
dto.setEmail(user.getEmail());
// ...
return dto;
}
// ...
}
entity
包含实体类,表示应用程序中的数据模型,并与数据库表进行映射。这些实体类通常用于持久化数据,并使用 ORM 框架进行映射,例如 Hibernate 或 MyBatis。
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
// ...
// Getter and setter methods
}
enum
包含枚举类,用于定义应用程序中的常量或状态。这些枚举类通常用于状态机或常量定义。
public enum UserRole {
ADMIN,
USER,
GUEST
}
exception
包含异常类,用于处理应用程序中的异常情况。这些异常类通常用于自定义异常类型和异常处理。
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(Long id) {
super("User with id " + id + " not found");
}
}
interceptor
包含拦截器类,用于拦截和处理请求和响应。这些拦截器类通常用于权限验证、日志记录、性能监控等方面。
public class AuthorizationInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 鉴权逻辑
return true;
}
}
mapper
包含 Mapper 类,用于将实体类与数据访问层(例如数据库表)进行映射。这些 Mapper 类通常用于使用 MyBatis 或其他 ORM 框架进行数据访问。
@Mapper
public interface UserMapper {
UserDTO toDTO(User user);
User toEntity(UserDTO dto);
}
model
包含模型类,通常用于与视图层进行交互,例如表单数据。这些模型类通常用于前端视图的数据绑定和展示。
public class LoginForm {
private String username;
private String password;
// ...
// Getter and setter methods
}
repository
包含数据访问对象(Data Access Object)类,用于与数据库进行交互。这些 DAO 类通常使用 Spring Data JPA 或其他 ORM 框架进行数据访问。
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
service
包含服务层类,实现应用程序的业务逻辑。这些服务类通常使用 @Service
注释进行标识,用于封装和实现业务逻辑。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User getUserById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new UserNotFoundException(id));
}
// ...
}
task
包含定时任务类,用于在后台执行定期或延迟的任务。这些定时任务类通常使用 Spring 的 @Scheduled
注释进行标识。
@Component
public class DataCleanupTask {
@Scheduled(fixedRate = 60000)
public void cleanup() {
// 数据清理逻辑
}
}
util
包含实用工具类,例如日期时间处理、字符串处理、加密算法等。这些工具类通常用于实现公共或通用的功能。
public class DateUtils {
public static Date addDays(Date date, int days) {
// ...
}
}
说明
这种目录结构通常符合 Spring Boot 的约定,便于代码的管理和维护。不过,这种结构并不是硬性要求,可以根据项目的实际情况进行调整。
组织代码时,尽量遵循单一职责原则和依赖倒置原则,使得各个层次之间的耦合度尽量低。
将公共代码、通用类库等放在单独的模块中,避免重复代码和依赖冲突。
使用包名来组织代码,可以避免不同代码之间的命名冲突。
统一使用日志框架,并规范日志输出格式。
使用代码生成工具可以提高代码质量和开发效率。
代码注释和文档应该清晰明了,方便其他开发者理解和使用代码。