一、前言

Spring 注解是 Java 后端开发的基石,也是面试和项目开发的高频考点。很多同学在学习时,只掌握了 PPT 上的基础用法,却不知道在真实项目中这些注解是如何被扩展和简化的。本文将以 RuoYi-Vue 框架为蓝本,带你从实战角度重新理解这些注解。


二、Spring IOC & DI 注解实战

2.1 环境启动:一切的入口

任何 Spring Boot 项目的起点都是主启动类,@SpringBootApplication 这个组合注解是整个项目的 “开关”。

代码示例:主启动类

java

运行

package com.ruoyi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 项目启动入口
 * @SpringBootApplication 是一个复合注解,包含了以下关键能力:
 * 1. @Configuration:标记该类为配置类
 * 2. @EnableAutoConfiguration:开启 Spring Boot 自动配置
 * 3. @ComponentScan:自动扫描当前包及其子包下的所有组件
 */
@SpringBootApplication
public class RuoYiApplication {
    public static void main(String[] args) {
        // 启动 Spring 应用,创建并刷新 IOC 容器
        SpringApplication.run(RuoYiApplication.class, args);
        System.out.println("(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`ლ)゙  ");
    }
}

📌 截图占位符[主启动类代码截图,展示@SpringBootApplication和main方法]


2.2 IOC:使用 @Service 创建自定义对象

在业务层,我们使用 @Service 注解将类标记为业务组件,交给 Spring 容器管理,实现控制反转(IOC)。

代码示例:用户业务实现类

java

运行

package com.ruoyi.system.service.impl;

import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

/**
 * 用户业务层实现类
 * @Service:IOC 核心注解,作用是将当前类注册为 Spring 容器中的 Bean
 * 1. 标记业务层组件,默认 Bean 名称为类名首字母小写(sysUserServiceImpl)
 * 2. 由 Spring 自动实例化、管理对象生命周期,无需手动 new 对象
 */
@Service
public class SysUserServiceImpl implements ISysUserService {

    /**
     * @Resource:DI 依赖注入注解(JSR-250 规范),实现依赖注入
     * 1. 默认按名称匹配注入,找不到则按类型匹配
     * 2. 这里注入 MyBatis 生成的 Mapper 接口代理对象,直接使用即可
     * 替代方案:@Autowired(Spring 原生注解,默认按类型注入)
     */
    @Resource
    private SysUserMapper userMapper;

    @Override
    public SysUser selectUserById(Long userId) {
        // 直接使用注入的 Mapper 对象查询数据
        return userMapper.selectUserById(userId);
    }
}

📌 截图占位符[Service实现类代码截图,重点框出@Service和@Resource注解]

注解作用说明:

表格

注解 核心作用
@Service 将业务类注册为 Spring Bean,纳入 IOC 容器管理
@Resource 自动注入容器中的 Bean,实现对象依赖解耦

三、Spring MVC 注解实战(企业级用法 vs PPT 基础用法)

传统 PPT 教学通常会分开讲解 @Controller@ResponseBody,但在前后端分离项目中,RuoYi 框架直接使用更简洁的 @RestController,并结合 RESTful 风格注解,大幅简化了代码。

3.1 环境配置:MVC 自动配置

主启动类的 @SpringBootApplication 已经包含了 @EnableAutoConfiguration,它会自动配置 Spring MVC 的核心组件,如 DispatcherServlet、消息转换器等,无需手动编写 web.xml 或 Spring MVC 配置文件。


3.2 MVC 注解实战代码

代码示例:用户控制层

java

运行

package com.ruoyi.system.controller;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.SysUser;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;

/**
 * 用户信息控制层
 * @RestController:PPT中通常分开讲解@Controller和@ResponseBody,而RuoYi中直接使用该组合注解
 * 等价于:@Controller + @ResponseBody
 * 作用:
 * 1. 标记为控制器组件,纳入IOC容器
 * 2. 所有方法返回值直接序列化为JSON写入HTTP响应体,无需每个方法加@ResponseBody
 */
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {

    @Resource
    private ISysUserService userService;

    /**
     * 查询用户列表
     * @GetMapping:PPT中常用@RequestMapping(method = RequestMethod.GET)
     * RuoYi中直接使用@GetMapping简化写法,更贴合RESTful风格
     * 作用:将GET请求映射到当前方法,处理查询请求
     */
    @GetMapping("/list")
    public AjaxResult list(SysUser user) {
        startPage(); // RuoYi自定义分页方法(父类BaseController提供)
        List<SysUser> list = userService.selectUserList(user);
        return AjaxResult.success(getDataTable(list));
    }

    /**
     * 新增用户
     * @PostMapping + @RequestBody 组合:PPT中常讲解表单提交@RequestParam
     * RuoYi中针对前后端分离场景,直接用@RequestBody接收JSON格式请求体
     * 作用:将请求体中的JSON数据自动绑定到SysUser对象,实现参数自动封装
     */
    @PostMapping
    public AjaxResult add(@RequestBody SysUser user) {
        if (!userService.checkUserNameUnique(user)) {
            return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
        }
        return toAjax(userService.insertUser(user));
    }
}

📌 截图占位符[Controller控制层代码截图,重点框出@RestController、@GetMapping和@RequestBody注解]

关键注解差异对比:

表格

注解 PPT 基础用法 RuoYi 实战用法 优势
@RestController 分开使用 @Controller + @ResponseBody 直接使用 @RestController 代码更简洁,避免重复注解
@GetMapping 使用 @RequestMapping(method = RequestMethod.GET) 直接使用 @GetMapping 更符合 RESTful 风格,可读性更强
@RequestBody 主要讲解 @RequestParam 表单提交 普遍使用 @RequestBody 接收 JSON 适配前后端分离架构,数据传输更高效

四、总结

通过 RuoYi-Vue 框架的实战代码,我们可以看到 Spring 注解在企业级项目中的实际用法:

  1. IOC/DI 注解@Service + @Resource 组合,实现了业务对象的自动创建与依赖注入,代码解耦,易于维护。
  2. MVC 注解@RestController + @GetMapping + @PostMapping + @RequestBody 组合,完美适配前后端分离架构,代码更简洁、更规范。

更多推荐