Spring | IOC、DI、MVC解释(举例Ruoyi)

Spring | IOC、DI、MVC解释(以Ruoyi为例)

【Spring】IOC、DI讲解

IOC

IOC:控制反转。

顾名思义,也就是说对象由spring来创建,不再由程序本身来new创建,用户是主动方。

在这里插入图片描述

那Why需要IOC思想呢?

实例化一个组件其实很难,例如,BookService和UserService要创建HikariDataSource,实际上需要读取配置,才能先实例化HikariConfig,再实例化HikariDataSource。

没有必要让BookService和UserService分别创建DataSource实例,完全可以共享同一个DataSource,但谁负责创建DataSource,谁负责获取其他组件已经创建的DataSource,不好处理。类似的,CartServlet和HistoryServlet也应当共享BookService实例和UserService实例,但也不好处理。

很多组件需要销毁以便释放资源,例如DataSource,但如果该组件被多个组件共享,如何确保它的使用方都已经全部被销毁?

随着更多的组件被引入,例如,书籍评论,需要共享的组件写起来会更困难,这些组件的依赖关系会越来越复杂。

测试某个组件,例如BookService,是复杂的,因为必须要在真实的数据库环境下执行。

从上面的例子可以看出,如果一个系统有大量的组件,其生命周期和相互之间的依赖关系如果由组件自身来维护,不但大大增加了系统的复杂度,而且会导致组件之间极为紧密的耦合,继而给测试和维护带来了极大的困难。

因此,核心问题是:

谁负责创建组件?
谁负责根据依赖关系组装组件?
销毁时,如何按依赖顺序正确销毁?
解决这一问题的核心方案就是IoC。

在IoC模式下,控制权发生了反转,即从应用程序转移到了IoC容器,所有组件不再由应用程序自己创建和配置,而是由IoC容器负责,这样,应用程序只需要直接使用已经创建好并且配置好的组件。

因此,IoC又称为依赖注入(DI:Dependency Injection),它解决了一个最主要的问题:将组件的创建+配置与组件的使用相分离,并且,由IoC容器负责管理组件的生命周期。


举个ruoyi例子:

使用@Service注解后,SysUserServiceImpl类不再需要在程序中new,这个对象由Spring来创建,并放在了Spring容器中
在这里插入图片描述
在这里@Service是告知Spring容器去创建这个对象,@Service底层是由@Componet封装的。如下图

在这里插入图片描述

DI

DI:依赖注入

简单来说是配合IOC使用的,将Spring容器中创建的组件,注入到当前声明的对象上。

举个ruoyi例子:

通过@Autowired 注解,将容器中的ISysUserService组件注入到当前声明的对象userService。

在这里插入图片描述

这里ISysUserService是接口,它的唯一实现类是SysUserServiceImpl

共享同一个ISysUserService组件

在这里插入图片描述
DI的好处:实现了程序的解耦,便于维护。

【Spring】MVC讲解

SpringMVC是一个MVC的开源框架,SpringMVC=struts2+spring,springMVC就相当于是Struts2加上Spring的整合。

简单来说是MVC是Web开发的架构,用来处理浏览器的HTTP请求,处理之后返回HTTP响应给浏览器。

SpringMVC的原理和组成:
在这里插入图片描述
举个ruoyi例子:

使用注解@RestController 注册Controller
在这里插入图片描述

@ResponseBody是将所有返回数据转成JSON格式

使用注解@GetMapping@PostMapping注册HTTP处理函数

在这里插入图片描述

注册HTTP Method处理函数的常用注解
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping

总流程:前端发送请求->经过SpringMVC找到对应处理函数->返回JSON给前端

在这里插入图片描述

Reference

liaoxuefeng对SpringIOC原理的分析:https://www.liaoxuefeng.com/wiki/1252599548343744/1266265100383840

spring官网IOC介绍:https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/beans.html

spring官网DI介绍:https://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.html

Spring、SpringMVC和SpringBoot看这一篇就够了:https://cloud.tencent.com/developer/article/1665045

手写Web MVC:https://www.liaoxuefeng.com/wiki/1539348902182944/1539427939647521

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值