登录注解解析
自定义类型的创建 (IOC - Inverse Of Control)代码位置SysLoginService类定义处。代码片段Component // PPT知识点告知Spring容器把这个类注册为Bean public class SysLoginService { // ... 其他代码 }作用说明Component注解的作用是将SysLoginService这个自定义类的创建权从开发者手中反转给了Spring容器即IOC。Spring启动时会通过反射PPT中提到的Reflection自动创建SysLoginService的对象并将其放入Bean容器中管理而不需要我们在代码里手动new SysLoginService()。B. 自定义类型的注入 (DI - Dependency Inject)代码位置SysLoginService类内部的成员变量声明处。代码片段Autowired // PPT知识点从容器中取出Bean并注入 private RedisCache redisCache; Autowired private ISysUserService userService;作用说明SysLoginService(A类) 依赖于RedisCache(B类) 和ISysUserService(C类)。Autowired注解告诉Spring当创建SysLoginService对象时请自动把容器里已经存在的RedisCache和ISysUserService对象找出来通过反射设置Inject到这个成员变量中。这样SysLoginService就可以直接使用redisCache和userService而无需关心它们是如何创建的。要使上述IOC和DI生效必须有Spring Boot的启动类。SpringBootApplication // PPT知识点组合注解开启自动扫描 public class RuoYiApplication { public static void main(String[] args) { // PPT知识点执行 SpringApplication.run 启动容器 SpringApplication.run(RuoYiApplication.class, args); } }整体逻辑流程启动main方法。扫描Component注解发现SysLoginService。扫描Autowired发现SysLoginService需要RedisCache。Spring容器先创建RedisCache对象再创建SysLoginService对象并把前者注入后者。Spring MVC 注解与PPT 不同的使用代码示例PPT中主要展示了基础的注解用法例如RestController和GetMapping。但在实际的RuoYi项目中我们经常需要处理前端传递的复杂数据JSON这时候会用到PPT中可能未详细展开的RequestBody注解。不同点的体现RequestBody的使用PPT中重点在于路由映射GetMapping,PostMapping但在实际开发中前后端分离架构下前端通常通过请求体 (Request Body)传递JSON数据而不是通过URL参数。代码位置SysLoginController类中的login方法。代码片段RestController // PPT知识点等同于 Controller ResponseBody返回JSON public class SysLoginController { PostMapping(/login) // PPT知识点映射HTTP POST请求 public AjaxResult login(RequestBody LoginBody loginBody) { // 关键点RequestBody // ... String token loginService.login( loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid() ); // ... } }功能Spring MVC接收到HTTP请求后会自动读取请求体Body中的JSON字符串例如{username: admin, password: 123456}利用Jackson等工具将其反序列化为LoginBody这个Java对象。差异对比如果没有RequestBodySpring MVC默认只会从URL参数Query Parameters中获取数据对应PPT中的RequestParam无法处理前端发送的JSON Body数据。