[后端作业W9] 注解

第一部分:Spring IOC、DI 注解使用自定义类型创建对象和注入对象的使用代码示例

一、Spring 环境启动相关代码

注解作用:

@SpringBootApplicationSpringBoot 核心注解,开启包扫描、自动配置、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:位于多个成员变量上方(如 SysUserMapperSysRoleMapper 等)

@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() 方法执行逻辑。

四、完整执行流程

  1. 启动main 方法执行 run() → 开启 Spring 容器
  2. 扫描@SpringBootApplication 扫描所有注解类
  3. IOC创建@Component/@Service/@Bean → Spring 反射创建对象
  4. DI注入@Autowired → Spring 自动注入成员变量
  5. 运行:前端请求 → @GetMapping → 执行方法 → 直接使用注入对象

五、注解对比表

表格

注解作用注入方式底层
@Component注册通用 Bean-反射创建
@Service业务层 Bean-反射创建
@Bean手动注册 Bean-反射创建
@Autowired依赖注入按类型反射赋值
@Resource依赖注入按名称反射赋值
@RestController控制器 Bean-反射创建
@GetMapping请求绑定-反射调用方法

第二部分、RuoYi 中 Spring MVC 注解与 PPT 不同的完整示例

一、开篇说明

  1. PPT 讲的 Spring MVC 注解@Controller@RestController@RequestMapping@GetMapping@PostMapping@ResponseBody@RequestBody

  2. 用法不同的注解

  • @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 中的实际用法核心作用
@RestControllerSpring MVC所有控制器类上统一使用标记为控制器,自动返回 JSON
@PostMapping / @GetMappingSpring MVC登录、用户列表、验证码等接口处理指定 HTTP 请求,绑定 URL 路径
@RequestParamSpring MVC头像上传接口接收文件接收 URL 参数或表单文件,支持默认值
@ValidatedSpring Validation新增用户接口参数校验开启请求体参数自动校验(Spring 增强版)
@RestControllerAdviceSpring MVC全局异常处理器统一捕获所有控制器异常,返回 JSON
@ExceptionHandlerSpring MVC处理权限不足等具体业务异常按异常类型分别处理,返回友好提示

四、Spring MVC 完整执行流程

  1. 启动:run() → 初始化 DispatcherServlet
  2. 扫描:@RestController/@Controller → 注册为 Bean
  3. 映射:@GetMapping/@PutMapping/@DeleteMapping → 建立 URL → 方法映射
  4. 请求:浏览器访问 URL
  5. 匹配:DispatcherServlet 找到对应方法
  6. 注入:@PathVariable/@RequestParam/@RequestBody 自动赋值
  7. 执行:调用方法
  8. 返回:@ResponseBody 自动转 JSON 返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值