ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Spring Boot核心注解详解与应用实践

Spring Boot核心注解详解与应用实践 1. Spring Boot 核心注解概述Spring Boot 作为 Java 生态中最流行的应用框架之一其核心注解体系是开发者必须掌握的基础知识。这些注解不仅仅是语法糖更是框架设计思想的体现能够显著提升开发效率和代码质量。在 Spring Boot 项目中合理使用注解可以简化配置告别繁琐的 XML实现依赖注入和控制反转快速构建 RESTful API自动化事务管理便捷处理数据验证2. 启动类与核心配置注解2.1 SpringBootApplication这是 Spring Boot 应用的基石注解通常标注在主启动类上。它实际上是三个核心注解的组合Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Inherited SpringBootConfiguration EnableAutoConfiguration ComponentScan public interface SpringBootApplication { // ... }实际开发中我们推荐这样使用SpringBootApplication public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } }注意事项在微服务架构中如果启动类需要额外配置组件扫描路径可以使用ComponentScan的basePackages属性明确指定包路径避免扫描不必要的包。2.2 配置相关注解Configuration标识一个类为配置类替代传统的 XML 配置方式Configuration public class AppConfig { Bean public MyService myService() { return new MyServiceImpl(); } }Bean用于配置类中声明 Spring BeanBean public DataSource dataSource() { return new HikariDataSource(); }PropertySource加载指定配置文件Configuration PropertySource(classpath:custom.properties) public class CustomConfig { // ... }3. 依赖注入相关注解3.1 组件扫描注解Spring 通过以下注解自动发现和注册 Bean注解用途层级Component通用组件注解无特定层级Service标识服务层组件业务逻辑层Repository标识数据访问组件持久层Controller标识控制器组件表现层RestControllerController ResponseBodyREST API3.2 依赖注入注解Autowired按类型自动注入Service public class UserServiceImpl implements UserService { // ... } RestController public class UserController { Autowired private UserService userService; }Qualifier当存在多个同类型 Bean 时指定名称Repository(userRepoA) public class UserRepositoryA implements UserRepository {} Repository(userRepoB) public class UserRepositoryB implements UserRepository {} Service public class UserService { Autowired Qualifier(userRepoA) private UserRepository userRepo; }Primary设置首选注入的 BeanPrimary Repository(userRepoA) public class UserRepositoryA implements UserRepository {}ResourceJSR-250 标准注解默认按名称注入Service public class UserService { Resource(name userRepoA) private UserRepository userRepo; }4. Web 开发相关注解4.1 控制器相关RestController组合注解相当于 Controller ResponseBodyRestController RequestMapping(/api/users) public class UserController { // ... }4.2 请求映射注解注解HTTP 方法示例GetMappingGETGetMapping(/{id})PostMappingPOSTPostMappingPutMappingPUTPutMapping(/{id})DeleteMappingDELETEDeleteMapping(/{id})PatchMappingPATCHPatchMapping(/{id})4.3 请求参数处理PathVariable获取路径参数GetMapping(/users/{id}) public User getUser(PathVariable Long id) { // ... }RequestParam获取查询参数GetMapping(/users) public ListUser getUsers(RequestParam(required false) String name) { // ... }RequestBody接收请求体 JSONPostMapping(/users) public User createUser(RequestBody Valid UserCreateDTO dto) { // ... }RequestHeader获取请求头GetMapping(/info) public String getInfo(RequestHeader(User-Agent) String userAgent) { // ... }5. 数据校验注解Spring Boot 支持 JSR-380 (Bean Validation 2.0) 规范5.1 常用校验注解注解作用NotNull非空NotEmpty非空且非空字符串/集合NotBlank非空且至少一个非空白字符Size长度限制Min/Max数值范围Pattern正则校验Email邮箱格式使用示例public class UserDTO { NotBlank Size(max 50) private String username; Email private String email; Min(18) Max(100) private Integer age; }5.2 分组校验public interface UpdateGroup {} public interface CreateGroup {} public class UserDTO { Null(groups UpdateGroup.class) NotNull(groups CreateGroup.class) private Long id; // ... } PostMapping public void create(Validated(CreateGroup.class) RequestBody UserDTO dto) { // ... }6. 数据持久化注解6.1 JPA 实体注解Entity标识 JPA 实体类Entity Table(name users) public class User { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; private String username; // getters/setters }6.2 字段映射Column配置列属性Column(name user_name, nullable false, length 50) private String username;Enumerated枚举类型映射Enumerated(EnumType.STRING) private Gender gender; // 存储枚举名称而非序号6.3 关联关系一对一关系Entity public class User { OneToOne private Profile profile; }一对多关系Entity public class Order { ManyToOne private User user; }7. 事务管理注解Transactional声明式事务管理Service public class OrderService { Transactional(rollbackFor Exception.class) public void placeOrder(Order order) { // ... } }关键属性propagation: 事务传播行为isolation: 隔离级别timeout: 超时时间readOnly: 是否只读8. 测试相关注解8.1 单元测试SpringBootTest ActiveProfiles(test) public class UserServiceTest { Autowired private UserService userService; Test Transactional public void testCreateUser() { // ... } }8.2 Mock 测试WebMvcTest(UserController.class) public class UserControllerTest { Autowired private MockMvc mockMvc; MockBean private UserService userService; Test public void testGetUser() throws Exception { // ... } }9. 高级特性注解9.1 异步处理Async public void asyncTask() { // 异步执行 } EnableAsync Configuration public class AsyncConfig { Bean public Executor taskExecutor() { // 配置线程池 } }9.2 定时任务Scheduled(cron 0 0 12 * * ?) public void dailyReport() { // 每天中午执行 } EnableScheduling SpringBootApplication public class MyApp { // ... }10. 自定义注解开发Spring Boot 支持开发者创建自己的注解10.1 定义注解Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface AuditLog { String action(); String module(); }10.2 实现处理逻辑Aspect Component public class AuditLogAspect { Around(annotation(auditLog)) public Object around(ProceedingJoinPoint joinPoint, AuditLog auditLog) throws Throwable { // 前置处理 Object result joinPoint.proceed(); // 后置处理 return result; } }10.3 使用自定义注解RestController public class UserController { AuditLog(action create, module user) PostMapping(/users) public User createUser(RequestBody User user) { // ... } }掌握这些核心注解后开发者可以更高效地构建 Spring Boot 应用。实际开发中建议根据项目需求选择合适的注解组合并遵循一致的注解使用规范。
返回列表