SpringBoot 通过丰富的注解简化了开发流程,提升了效率。以下从核心注解、配置注解、数据注解等方面展开详细说明,并附实战代码示例。
@SpringBootApplication 是 Spring Boot 项目的核心注解,组合了三个关键功能:
典型应用场景:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
此注解通常位于主类上,作为应用入口。自动配置功能会根据项目依赖(如JDBC、JPA)自动配置Spring环境。
@RestController 和 @RequestMapping 是构建RESTful API的基础:
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public ResponseEntity getUserById(@PathVariable Long id) {
return ResponseEntity.ok(userService.findById(id));
}
@PostMapping
public ResponseEntity createUser(@RequestBody User user) {
return new ResponseEntity<>(userService.save(user), HttpStatus.CREATED);
}
}
关键点说明:
Spring Boot 支持多种依赖注入方式:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
@Transactional
public User save(User user) {
return userRepository.save(user);
}
}
替代方案:
@Service
@RequiredArgsConstructor
public class UserServiceImpl {
private final UserRepository userRepository;
}
@ConfigurationProperties 实现类型安全的配置绑定:
@Configuration
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
private int maxConnections;
// getters/setters
}
application.properties配置示例:
app.name=MyApp
app.max-connections=100
@Value 适用于简单属性注入:
@Value("${app.timeout:5000}")
private int timeout;
JPA 相关注解示例:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 50)
private String username;
@Enumerated(EnumType.STRING)
private UserStatus status;
@OneToMany(mappedBy = "user")
private List orders;
}
事务管理注解:
@Transactional
public void transferMoney(Long fromId, Long toId, BigDecimal amount) {
// 业务逻辑
}
@Scheduled 实现定时任务:
@Scheduled(cron = "0 0 9 * * ?")
public void dailyReport() {
// 生成日报逻辑
}
@Async 实现异步方法调用:
@Async
public CompletableFuture asyncGetUser(Long id) {
return CompletableFuture.completedFuture(userRepository.findById(id));
}
需在配置类添加@EnableAsync启用异步支持。
Spring Boot Test 关键注解:
@SpringBootTest
@AutoConfigureMockMvc
class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void shouldReturnUser() throws Exception {
mockMvc.perform(get("/api/users/1"))
.andExpect(status().isOk());
}
}
@MockBean 用于模拟依赖组件,@DataJpaTest 用于持久层单元测试。
创建自定义注解实现权限控制:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AdminOnly {
}
@Aspect
@Component
public class SecurityAspect {
@Before("@annotation(AdminOnly)")
public void checkAdmin() {
// 权限验证逻辑
}
}
使用时直接在方法上添加@AdminOnly注解即可触发权限检查。
@Timed记录方法执行时间:
@Timed(value = "user.query.time", description = "查询用户时间")
public User queryUser(Long id) {
return userRepository.findById(id);
}
需配合Micrometer和监控系统(如Prometheus)使用。
@ControllerAdvice 实现全局异常处理:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity handleNotFound(ResourceNotFoundException ex) {
return new ResponseEntity<>(new ErrorResponse(ex.getMessage()), HttpStatus.NOT_FOUND);
}
}
@ResponseStatus 可自定义HTTP状态码:
@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "Invalid parameters")
public class InvalidRequestException extends RuntimeException {
}
以上注解构成了Spring Boot开发的核心框架,合理运用这些注解可以显著提升开发效率。建议根据实际项目需求组合使用,并关注Spring Boot官方文档获取最新注解特性。