在下关于SpringMVC简单理解

本文介绍了SpringMVC的基本概念,包括Spring框架的轻量级特性,MVC设计模式的组成部分。重点阐述了IOC(控制反转)/DI(依赖注入)和AOP(切面编程)的概念,以及SpringMVC的处理流程。通过对验证用户流程的示例,解释了AOP如何减少重复代码,提高代码复用性和维护性。
摘要由CSDN通过智能技术生成

Spring 是什么?
Spring是一个轻量级开源框架,为了解决企业应用开发的复杂性而创建的。简单来说,其根本目的就是为了让编程更加简单,提高开发效率。

MVC是什么?
MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建 Web 应用程序表现层的模式。MVC 中每个部分各司其职

SpringMVC是以Spring为核心,而Spring最核心的模块是IOC(控制反转)/DI(依赖注入)容器以及基于动态代理AOP

如何理解IOC(DI)和AOP?
IOC的理解:
当我们把bean交给Spring创建后,IOC就是将创建好的bean装起来(单指IOC的话,其本质就是一个容器-------控制反转)。

我们需要了解的是bean交给了Spring的谁创建了?
Beanfactory(也就是bean工厂)创建了所有的bean

我们给他创建,beanfactory就每次都创建了吗?
并不是,我们只需要他创建一次。所以就需要利用单例模式,只需要创建一次就够了。

那么这样创建会有什么后果呢?
会导致加载的时候比较慢,但是消耗的是启动时间,运行时间会非常快。

那么beanfactory怎么知道我们需要哪个bean呢?
这个时候就需要注解,通过扫描器扫描Spring特有的注解,然后依次创建对应的bean。

DI
所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

AOP(切面编程) 这里我找到一个CSDN的博主写的简单的认识,让我们看看
原文链接:https://blog.csdn.net/yanquan345/article/details/19760027

下面先说AOP是什么样的思想,我们一步一步慢慢来,先看一下传统程序的流程,比如银行系统会有一个取款流程
在这里插入图片描述

我们可以把方框里的流程合为一个,另外系统还会有一个查询余额流程,我们先把这两个流程放到一起:
在这里插入图片描述

有没有发现,这个两者有一个相同的验证流程,我们先把它们圈起来再说下一步:

有没有想过可以把这个验证用户的代码是提取出来,不放到主流程里去呢,这就是AOP的作用了,有了AOP,你写代码时不要把这个验证用户步骤写进去,即完全不考虑验证用户,你写完之后,在另我一个地方,写好验证用户的代码,然后告诉Spring你要把这段代码加到哪几个地方,Spring就会帮你加过去,而不要你自己Copy过去,这里还是两个地方,如果你有多个控制流呢,这个写代码的方法可以大大减少你的时间,不过AOP的目的不是这样,这只是一个“副作用”,真正目的是,你写代码的时候,事先只需考虑主流程,而不用考虑那些不重要的流程,懂C的都知道,良好的风格要求在函数起始处验证参数,如果在C上可以用AOP,就可以先不管校验参数的问题,事后使用AOP就可以隔山打牛的给所有函数一次性加入校验代码,而你只需要写一次校验代码。不知道C的没关系,举一个通用的例子,经常在debug的时候要打log吧,你也可以写好主要代码之后,把打log的代码写到另一个单独的地方,然后命令AOP把你的代码加过去,注意AOP不会把代码加到源文件里,但是它会正确的影响最终的机器代码。

现在大概明白了AOP了吗,我们来理一下头绪,上面那个方框像不像个平面,你可以把它当块板子,这块板子插入一些控制流程,这块板子就可以当成是AOP中的一个切面。所以AOP的本质是在一系列纵向的控制流程中,把那些相同的子流程提取成一个横向的面,这句话应该好理解吧,我们把纵向流程画成一条直线,然把相同的部分以绿色突出,如下图左,而AOP相当于把相同的地方连一条横线,如下图右,这个图没画好,大家明白意思就行。
在这里插入图片描述
这个验证用户这个子流程就成了一个条线,也可以理解成一个切面,aspect的意思我认为是方面,你用什么实物去类比,只要你能理解都可以。这里的切面只插了两三个流程,如果其它流程也需要这个子流程,也可以插到其它地方去。

SpringMVC流程图(以下的资源来自该链接,博主的解释还是比较详细的 https://www.cnblogs.com/gxc6/p/9544563.html)
在这里插入图片描述组件说明:

DispatcherServlet:前端控制器

用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,

由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

HandlerMapping:处理器映射器

HandlerMapping负责根据用户请求url找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,

例如:配置文件方式,实现接口方式,注解方式等。

Handler:处理器

Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。

由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。

HandlAdapter:处理器适配器

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

ViewResolver:视图解析器
  View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,

再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

View:视图
  springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。

最后:
特别感谢上文两位博主的分享,然我对MVC流程以及AOP的思想不那么懵懂,非常感谢!!!
关于AOP的实现代码还不是很清晰,只是能理解这种思想。MVC的执行流程也只能意会一部分,并不能表述的清楚,望见谅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值