深度解析:RuoYi-Vue 中的 Spring 核心注解(IOC/DI + MVC)实战本文基于 RuoYi-Vue 后台框架,通过真实代码案例,拆解 Spring IOC/DI 与 MVC 注解
一、前言
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 注解在企业级项目中的实际用法:
- IOC/DI 注解:
@Service+@Resource组合,实现了业务对象的自动创建与依赖注入,代码解耦,易于维护。 - MVC 注解:
@RestController+@GetMapping+@PostMapping+@RequestBody组合,完美适配前后端分离架构,代码更简洁、更规范。
更多推荐


所有评论(0)