浅谈Spring SpringMVC 的实现原理


前言

Spring目前是在java领域最流行的一个框架了,SpringMVC是对Spnig的扩展。最近在准备面试题的时候,看了许多有关spring的知识。觉得颇有感触。以前只是知道怎么用,没有去深入理解内部知识。希望看了这篇文章能对你有所帮助。

一、Spring

1.为什么要使用 Spring

1.使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件 之间的耦合性,让我们更专注于应用逻辑
2.可以提供众多服务,事务管理,WS等。
3.AOP的很好支持,方便面向切面编程。
4.对主流的框架提供了很好的集成支持,如Mybatis,JPA等
5.Spring DI机制降低了业务对象替换的复杂性。
6.Spring属于低侵入,代码污染极低。
7.Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部

2.IOC(inversion of control)的理解

IOC:Inversionof Control(中文:控制反转)是 spring 的核心,对于 spring 框架来说,就是由 spring 来负责控制对象的生命周期和对象间的关系。
简单来说,控制指的是当前对象对内部成员的控制权;控制反转指的是,这种控制权不由当前对象管理了,由其他(类,第三方容器)来管理

这一说法有点片面了,对新手来说真的有点难理解。下面举个例子帮助大家认识Spring IOC

一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来,最简单的方法是类A中创建一个对于接口B的实现类C的实例,但这种方法显然两者的依赖(Dependency)太大了。而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现类C放入IoC的 容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联

3.关于AOP

aop 是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种
技术。
简单来说就是统一处理某一“切面”(类)的问题的编程思想,比如统一处理日志、异常等。

  1. aop是面向切面编程,不同于java原始的oop是面向对象编程,使用aop可以实现不需要修改原功能代码,只需要修改一下配置,即可实现功能的扩展
  2. aop采用的是横向抽取机制,取代了传统的纵向继承体系,减少了重复性代码
  3. 运行期间通过代理方式向目标类植入增强代码
  4. 经典的应用场景有事务的管理,安全检查,缓存,性能监控等等

实现AOP的技术,主要分为两大类:
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

二、SpringMVC

1.spring mvc 的组件

  • 前置控制器 DispatcherServlet。
  • 映射控制器 HandlerMapping。
  • 处理器 Controller。
  • 模型和视图 ModelAndView。
  • 视图解析器 ViewResolver。

spring mvc 运行流程

  1. spring mvc 先将请求发送给 DispatcherServlet
  2. DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的Controller。
  3. DispatcherServlet 再把请求提交到对应的 Controller。
  4. Controller 进行业务逻辑处理后,会返回一个 ModelAndView。
  5. Dispathcher 查 询 一 个 或 多 个 ViewResolver 视 图 解 析 器 , 找 到ModelAndView 对象指定的视图对象。
  6. 视图对象负责渲染返回给客户端。

这么一了解是不是对Spring MVC 的认识更加深刻了


总结

刚开始写博客,目的是为了与大家分享一下采坑经验和为了整理材料以后遇到问题就不用了百度了看看自己的博客,也可以温故而知新。不喜勿喷。也欢迎各位大佬提提学习意见。

猜你喜欢

转载自blog.csdn.net/weixin_43691773/article/details/108788679