第一部分:Spring IOC、DI 注解使用自定义类型创建对象和注入对象的使用代码示例
一、Spring 环境启动相关代码
注解作用:
@SpringBootApplication:SpringBoot 核心注解,开启包扫描、自动配置、IOC 容器创建
1.包含 @Configuration把当前启动类标记为Spring 配置类,可以在类中定义 Bean、读取配置。
2.包含 @ComponentScan自动包扫描:默认扫描当前启动类所在包及其子包下所有类,凡是加了 @Service、@Component、@Controller、@Repository 的类,都会被自动识别,交由Spring IOC 容器创建对象。
3.包含 @EnableAutoConfiguration开启SpringBoot 自动配置:自动根据项目引入的依赖(如 SpringMVC、MyBatis、Redis),自动帮我们装配默认配置,无需手动写 XML 配置文件,简化开发。
代码说明:
SpringApplication.run(...):启动 Spring 容器,初始化 IOC 容器,创建所有 Bean,完成依赖注入,启动服务器。反射创建对象,反射完成依赖注入。
exclude = { DataSourceAutoConfiguration.class }:排除默认数据源自动配置(因为若依使用自定义的多数据源配置)
二、IOC:自定义类型 → Spring 创建 Bean(3种方式)
示例 1:@Component 注册通用 Bean(RedisCache)
文件:RedisCache.java
注解及作用:
@Component:将自定义类注册为 Spring Bean,由 Spring IOC 容器自动创建对象。(Spring 启动时反射创建 RedisCache 对象并存入容器)
@Autowired:自动从 Spring 容器中注入依赖对象,实现 DI 依赖注入。
示例 2:@Service 注册业务层 Bean
文件:SysUserServiceImpl.java

注解作用:
@Service:位于类的上方。@Service 是 @Component 的派生注解,专门用于标注业务层实现类。
Spring IOC 容器启动时,会自动扫描并创建 SysUserServiceImpl 的实例对象,将其注册为 Bean,供其他组件(如 Controller)注入使用,是业务层对象交给 Spring 管理的标志。
@Autowired:位于多个成员变量上方(如 SysUserMapper、SysRoleMapper 等)
@Autowired 用于实现依赖注入(DI)Spring 会从容器中找到匹配类型的 Bean(如 MyBatis 生成的 Mapper、其他 Service 对象),自动赋值给对应的成员变量,无需手动初始化,直接在业务方法中使用即可。
示例 3:@Configuration + @Bean 手动注册 Bean
文件:RedisConfig.java

注解作用:
@Configuration:位于类上方,声明当前类为 Spring 配置类,Spring 启动时会自动扫描并加载该类,识别其中的 @Bean 方法,是手动注册 Bean 的基础。
@EnableCaching:位于类上方,开启 Spring 的声明式缓存支持,让项目可以使用 @Cacheable 等缓存注解。
@Bean:位于方法上方,将方法的返回值(RedisTemplate 对象)反射生成为 Spring IOC 容器中的 Bean,由 Spring 管理其生命周期。后续其他类(如 RedisCache)可通过 @Autowired 直接注入使用该对象。
三、DI:Bean 注入使用(直接用,不用初始化new)
文件:CaptchaController.java

注解作用:
@RestController:@RestController 是 @Controller 和 @ResponseBody 的组合注解,用于标注控制层类。Spring IOC 容器启动时,会自动创建 CaptchaController 对象并注册为 Bean。同时标识该类中的方法返回值直接作为 HTTP 响应体,用于处理前端请求。
@Resource:Java 标准的依赖注入注解,默认按名称匹配注入 Bean。@Resource(name = "captchaProducer"):Spring 会在容器中查找名为 captchaProducer 的 Bean,并赋值给变量。@Resource(name = "captchaProducerMath"):同理,注入名称匹配的验证码生成器 Bean。
@Autowired:Spring 原生的依赖注入注解,默认按类型匹配注入 Bean。@Autowired private RedisCache redisCache;:自动注入前面用 @Component 注册的 RedisCache Bean。@Autowired private ISysConfigService configService;:自动注入业务层 ISysConfigService 的实现类 Bean。无需手动 new 对象,直接在方法中调用即可使用。
@GetMapping:SpringMVC 的请求映射注解,标识该方法用于处理 HTTP GET 请求。当浏览器访问 /captchaImage 路径时,SpringMVC 会自动调用 getCode() 方法执行逻辑。
四、完整执行流程
- 启动:
main方法执行run()→ 开启 Spring 容器 - 扫描:
@SpringBootApplication扫描所有注解类 - IOC创建:
@Component/@Service/@Bean→ Spring 反射创建对象 - DI注入:
@Autowired→ Spring 自动注入成员变量 - 运行:前端请求 →
@GetMapping→ 执行方法 → 直接使用注入对象
五、注解对比表
表格
| 注解 | 作用 | 注入方式 | 底层 |
|---|---|---|---|
| @Component | 注册通用 Bean | - | 反射创建 |
| @Service | 业务层 Bean | - | 反射创建 |
| @Bean | 手动注册 Bean | - | 反射创建 |
| @Autowired | 依赖注入 | 按类型 | 反射赋值 |
| @Resource | 依赖注入 | 按名称 | 反射赋值 |
| @RestController | 控制器 Bean | - | 反射创建 |
| @GetMapping | 请求绑定 | - | 反射调用方法 |
第二部分、RuoYi 中 Spring MVC 注解与 PPT 不同的完整示例
一、开篇说明
-
PPT 讲的 Spring MVC 注解
@Controller、@RestController、@RequestMapping、@GetMapping、@PostMapping、@ResponseBody、@RequestBody -
用法不同的注解
@PutMapping@DeleteMapping@PathVariable@RequestParam@Validated@ResponseStatus@ExceptionHandler(全局异常)@RestControllerAdvice
3.逻辑:启动 → 扫描 → 映射 → 请求 → 响应
二、Spring 环境启动代码(第一部分也写到了)

@SpringBootApplication:自动开启 SpringMVC 配置、自动扫描 Controller
SpringApplication.run():启动 Web 服务器,初始化 MVC 映射关系
三、RuoYi 中 与 PPT 不同 的 Spring MVC 注解示例
示例 1:@PutMapping
代码来源:SysUserController.java
注解作用:@PutMapping:处理 HTTP PUT 请求,用于更新资源
示例 2:@DeleteMapping / @PathVariable
代码来源:SysUserController.java

注解作用:
@DeleteMapping:处理 HTTP DELETE 请求,用于删除资源。
@PathVariable:获取 URL 路径中的参数 /user/100 → userId=100。
示例 3:@RequestParam
代码来源:SysProfileController.java

注解作用:@RequestParam:将 HTTP 请求中的参数绑定到方法参数上。在这个头像上传接口中,它的作用是:接收前端表单中 name="avatarfile" 的文件上传参数,将文件流封装成 MultipartFile 对象,方便后续处理。
示例 4:@Validdated 参数校验
代码来源:SysUserController.java

注解作用:@Validated:开启请求体参数的自动校验,结合 SysUser 实体类上的 @NotBlank、@Size 等注解,在进入方法前就完成参数合法性检查。支持分组校验,支持用在类上。
示例 5:@ControllerAdvice + @ExceptionHandler
代码来源:GlobalExceptionHandler.java
注解作用:
@RestControllerAdvice =@ControllerAdvice + @ResponseBody
表示这是一个全局控制器增强类,会拦截所有 @RestController 抛出的异常。自动将处理结果转为 JSON 格式,专门用在前后端分离项目里。
@ExceptionHandler(AccessDeniedException.class)
指定这个方法只处理 AccessDeniedException 类型的异常,当用户访问没有权限的接口时,会自动进入这个方法,这里会记录日志,并返回友好的错误提示给前端。
总结:
| 注解 | 来源 | RuoYi 中的实际用法 | 核心作用 |
|---|---|---|---|
@RestController | Spring MVC | 所有控制器类上统一使用 | 标记为控制器,自动返回 JSON |
@PostMapping / @GetMapping | Spring MVC | 登录、用户列表、验证码等接口 | 处理指定 HTTP 请求,绑定 URL 路径 |
@RequestParam | Spring MVC | 头像上传接口接收文件 | 接收 URL 参数或表单文件,支持默认值 |
@Validated | Spring Validation | 新增用户接口参数校验 | 开启请求体参数自动校验(Spring 增强版) |
@RestControllerAdvice | Spring MVC | 全局异常处理器 | 统一捕获所有控制器异常,返回 JSON |
@ExceptionHandler | Spring MVC | 处理权限不足等具体业务异常 | 按异常类型分别处理,返回友好提示 |
四、Spring MVC 完整执行流程
- 启动:
run()→ 初始化 DispatcherServlet - 扫描:
@RestController/@Controller→ 注册为 Bean - 映射:
@GetMapping/@PutMapping/@DeleteMapping→ 建立 URL → 方法映射 - 请求:浏览器访问 URL
- 匹配:DispatcherServlet 找到对应方法
- 注入:
@PathVariable/@RequestParam/@RequestBody自动赋值 - 执行:调用方法
- 返回:
@ResponseBody自动转 JSON 返回

977

被折叠的 条评论
为什么被折叠?



