Spring Boot 注解指南
Spring Boot 核心注解及代码示例:构造型注解、依赖注入、配置、请求映射和验证。
1. 构造型注解
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
// 推荐构造器注入
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public List<UserDto> getAll() {
return userService.findAll();
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public UserDto create(@Valid @RequestBody CreateUserRequest req) {
return userService.create(req);
}
}
2. @Service 与 @Repository
@Service
@Transactional(readOnly = true)
public class UserService {
private final UserRepository repo;
private final PasswordEncoder encoder;
public UserService(UserRepository repo, PasswordEncoder encoder) {
this.repo = repo;
this.encoder = encoder;
}
@Transactional
public UserDto create(CreateUserRequest req) {
if (repo.existsByEmail(req.email())) {
throw new ConflictException("邮箱已被使用");
}
User user = new User(req.name(), req.email(), encoder.encode(req.password()));
return UserDto.from(repo.save(user));
}
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
boolean existsByEmail(String email);
Optional<User> findByEmail(String email);
}
3. @Value 与 @ConfigurationProperties
// @ConfigurationProperties — 类型安全配置绑定(推荐)
@Configuration
@ConfigurationProperties(prefix = "app")
@Validated
public class AppProperties {
@NotBlank
private String name;
private Security security = new Security();
@Data
public static class Security {
private String jwtSecret;
private Duration jwtExpiration = Duration.ofHours(1);
private List<String> allowedOrigins = List.of();
}
}
4. 验证注解
public record CreateUserRequest(
@NotBlank @Size(min = 1, max = 100) String name,
@NotBlank @Email String email,
@NotBlank @Size(min = 8, max = 128) String password,
@Min(0) @Max(150) Integer age
) {}
5. 常用注解速查
| 注解 | 层次 | 用途 |
|---|---|---|
| @SpringBootApplication | 应用 | 主入口 |
| @RestController | Web | REST 端点类 |
| @Service | 服务 | 业务逻辑 Bean |
| @Repository | 数据 | DAO Bean + 异常转换 |
| @Transactional | 数据 | 事务边界 |
| @Value | 任意 | 注入配置值 |
| @ConfigurationProperties | 配置 | 类型安全配置绑定 |
| @Profile | 任意 | 按 Spring 配置文件条件化 |