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应用主入口
@RestControllerWebREST 端点类
@Service服务业务逻辑 Bean
@Repository数据DAO Bean + 异常转换
@Transactional数据事务边界
@Value任意注入配置值
@ConfigurationProperties配置类型安全配置绑定
@Profile任意按 Spring 配置文件条件化