Spring Boot/Spring MVC核心注解深度解析

@Controller 与 @RestController

@Controller用于标记类为Spring MVC控制器,处理HTTP请求并返回视图名称。方法返回值通常配合视图解析器使用,如返回"home"对应home.html。@RestController是@Controller与@ResponseBody的组合,直接返回JSON/XML数据而非视图,适用于RESTful API开发。

@RequestMapping 与衍生注解

@RequestMapping是通用请求映射注解,支持指定路径、方法类型(GET/POST等)、consumes/produces条件。衍生注解包括:

  • @GetMapping:简化GET请求映射
  • @PostMapping:简化POST请求映射
  • @PutMapping:简化PUT请求映射
  • @DeleteMapping:简化DELETE请求映射
  • @PatchMapping:简化PATCH请求映射

示例代码:

java 复制代码
@RestController
@RequestMapping("/api/users")
public class UserController {
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.findById(id);
    }
}

@PathVariable 与 @RequestParam

@PathVariable用于从URI模板中提取变量值,如/users/{id}中的id。@RequestParam用于获取查询参数,支持默认值设置和必填校验:

java 复制代码
@GetMapping("/search")
public List<User> searchUsers(
    @RequestParam(required = false, defaultValue = "") String name,
    @PathVariable String department) {
    // ...
}

@RequestBody 与 @ResponseBody

@RequestBody将HTTP请求体反序列化为Java对象,通常用于POST/PUT请求的JSON/XML数据绑定。@ResponseBody将方法返回值序列化为响应体,在@RestController中默认启用。

@Valid 与校验注解

@Valid触发JSR-380 Bean Validation校验,常与校验注解配合使用:

  • @NotNull:非空校验
  • @Size:字符串/集合长度校验
  • @Email:邮箱格式校验
  • @Pattern:正则校验
java 复制代码
@PostMapping
public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
    return ResponseEntity.ok(userService.save(user));
}

@ControllerAdvice 与 @ExceptionHandler

@ControllerAdvice定义全局异常处理类,结合@ExceptionHandler捕获特定异常:

java 复制代码
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleNotFound(ResourceNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse(ex.getMessage()));
    }
}

@Transactional 事务管理

@Transactional声明式事务管理注解,可配置隔离级别、传播行为、超时等属性。Spring Boot默认对RuntimeException回滚:

java 复制代码
@Service
public class OrderService {
    @Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)
    public Order createOrder(Order order) {
        return orderRepository.save(order);
    }
}

@Configuration 与 @Bean

@Configuration标记配置类,@Bean声明Spring容器管理的Bean。常用于第三方库集成:

java 复制代码
@Configuration
public class AppConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplateBuilder().build();
    }
}

@Autowired 与依赖注入

@Autowired自动装配依赖,支持构造函数注入、字段注入、Setter方法注入。Spring推荐使用构造函数注入:

java 复制代码
@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

@Profile 环境配置

@Profile根据激活的profile条件化注册Bean,适用于多环境配置:

java 复制代码
@Configuration
@Profile("dev")
public class DevConfig {
    @Bean
    public DataSource devDataSource() {
        return new EmbeddedDatabaseBuilder().setType(H2).build();
    }
}

@Scheduled 定时任务

@Scheduled配置定时任务执行周期,支持cron表达式、固定延迟等模式:

java 复制代码
@Service
public class ReportService {
    @Scheduled(cron = "0 0 9 * * ?")
    public void generateDailyReport() {
        // 每天9点执行
    }
}
相关推荐
省钱兄--zs32 分钟前
无人自助拼豆系统架构设计与功能实现落地部署全流程实战指南
java·数据仓库·spring boot·系统架构·需求分析
vx_bisheyuange1 小时前
基于SpringBoot的农产品电商平台
spring boot·毕业设计
霸道流氓气质2 小时前
MinIO 入门与实战:S3 兼容对象存储、Spring Boot 集成与 AI 应用文件管理
人工智能·spring boot·后端
威哥爱编程3 小时前
【AI全栈12-07】Spring Boot 用 Agent 自动完成多步运营任务
java·spring boot·后端
RuoyiOffice3 小时前
SpringBoot3+Vue3 员工全生命周期:入转调离如何衔接账号、权限、资产与交接
spring boot·vue3·权限管理·员工管理·hrm·ruoyi office·人事变更
天若有情6733 小时前
从零搭建校园二手交易系统:Vue2 + SpringBoot 4.x 全栈实战
java·spring boot·后端
省钱兄--zs4 小时前
碰碰好评卡系统开发实战指南 核心功能实现与部署落地全流程拆解
数据仓库·经验分享·spring boot·小程序·架构
RuoyiOffice4 小时前
达梦 DM8、openGauss、人大金仓怎么选?RuoYi Office 国产数据库适配与验收指南
java·数据库·spring boot·架构·信创
java_nnnn4 小时前
Spring Web MVC 入门:从一个 URL 到 Java 后端完整处理请求
java·前端·spring boot·spring
IT研究室14 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计