Spring、Spring MVC、Spring Boot

引用转载
  1. 什么是Spring 什么是Spring? - Fighting_Chen - 博客园 (cnblogs.com)
  2. 什么是Spring?

1、概述

  1. Spring是一个基于Java的开源框架,为了解决企业应用开发的复杂性而创建的,是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
  2. Spring MVC是一种Web层MVC框架,它是Spring的一个模块,拥有Spring的特性。它分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
  3. Springboot是基于Spring4的条件注册的一套快速开发整合包。实现了自动配置,降低了项目搭建的复杂度。

2、详细解释

2.1 Spring(什么是Spring?

Spring是一个轻量级的控制反转ioc和面向切面 aop的容器的框架,
特点:
  1. 从大小与开销的两方面而言,Spring都是轻量级的。
  2. 通过ioc的技术达到松耦合的目的。
  3. 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统服务进行内聚性的开发
  4. 包含并管理应用对象bean的配置和和生命周期的支持,这个意义上是一个容器
  5. 将简单的组件配置、组合成复杂的应用,这个意义上是一个框架。
  6. 对于主流的应用框架提供了集成支持。
  • Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部
组成:
Spring 框架是一个分层架构,由七个定义好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置、管理bean的方式。
 
 
  1. 核心容器(Spring core):
Spring core提供了Spring框架的基本功能。核心的主要组件是 BeanFactory ,他是工厂模式实现的,BeanFactory使用的时控制反转(ioc)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  1. Spring上下文(Spring context):
Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
  1. Spring AOP:
通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
  1. Spring DAO:
JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
  1. Spring ORM:
Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  1. Spring Web 模块:
Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
  1. Spring MVC 框架
MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

2.2 Spring MVC

Spring MVC提供了一种轻度耦合的方式进行web应用的开发,它是Spring的一个常用的模块,是一个web框架.
组成(核心构成):
  1. 前端控制器(DispatcherServlet):主要用于接收客户端发送的 HTTP 请求、响应结果给客户端。
  2. 处理器映射器(HandlerMapping):根据请求的 URL 来定位到对应的处理器(Handler)。
  3. 处理器适配器(HandlerAdapter):在编写处理器(Handler)的时候要按照处理器适配器(HandlerAdapter) 要求的规则去编写,通过适配器可以正确的去执行 Handler。
  4. 处理器(Handler):就是我们经常写的 Controller 层代码,例如:UserController。
  5. 视图解析器(ViewResolver):进行视图的解析,将 ModelAndView 对象解析成真正的视图(View)对象返回给前端控制器。
  6. 视图(View):View 是一个接口, 它的实现类支持不同的视图类型(JSP,FreeMarker,Thymleaf 等)。
执行流程:
  1. 首先,用户发送 HTTP 请求给 SpringMVC 前端控制器 DispatcherServlet。
  2. DispatcherServlet 收到请求后,调用HandlerMapping 处理器映射器,根据请求 URL 去定位到具体的处理器 Handler,并将该处理器对象返回给 DispatcherServlet 。
  3. 接下来,DispatcherServlet 调用 HandlerAdapter 处理器适配器,通过处理器适配器调用对应的 Handler 处理器处理请求,并向前端控制器返回一个 ModelAndView 对象。
  4. 然后,DispatcherServlet 将 ModelAndView 对象交给 ViewResoler 视图解析器去处理,并返回指定的视图 View 给前端控制器。
  5. DispatcherServlet 对 View 进行渲染(即将模型数据填充至视图中)。View 是一个接口, 它的实现类支持不同的视图类型(JSP,FreeMarker,Thymleaf 等)。
  6. DispatcherServlet 将页面响应给用户。
Springboot实现了自动配置,降低了项目搭建的复杂度。它主要是为了解决Spring框架的需要大量的配置太麻烦的问题,所以他并不是用来代替Spring的解决方案,而是和Spring框架紧密结合个用于提升Spring开发者体验的工具。同时它集成了大量的第三方的配置(jackson,jdbc,mongo,redis等等),Springboot应用中的这些第三方的库几乎可以领配置开箱即用。Springboot只是承载者,辅助你简化项目搭建的过程的,如果承载的是web项目,使用Springmvc作为mvc框架,那么工作流流程和你上面描述的完全一样,因为这部分工作是Springmvc做的而不是Springboot做的。对使用者来书,换成springboot来说,项目的初始化的方式变了,配置文件变了,另外就是不需要单独安装tomcat这类容器了,maven打出jar包直接跑出来的就是这个网站,但是最核心的业务实现与业务流的实现是没有变化的。
特点:
  1. 搭建项目快,几秒钟就可以搭建完成;
  2. 让测试变的简单,内置了JUnit、Spring Boot Test等多种测试框架,方便测试;
  3. Spring Boot让配置变的简单,Spring Boot的核心理念:约定大约配置,约定了某种命名规范,可以不用配置,就可以完成功能开发,比如模型和表名一致就可以不用配置,直接进行CRUD(增删改查)的操作,只有表名和模型不一致的时候,配置名称即可;
  4. 内嵌容器,省去了配置Tomcat的繁琐;
  5. 方便监控,使用Spring Boot Actuator组件提供了应用的系统监控,可以查看应用配置的详细信息;
Springboot自动装配的过程:
注:蓝色为项目启动后自动装配的步骤,红色为项目启动后run方法的执行步骤。
  1. 从@SpringBootApplication进入到@EnableAutoConfiguration中
  1. 在选择器类中,getCandidateConfigurations方法下的SpringFactoriesLoader类
  1. SpringFactoriesLoader类下的loadSpringFactories方法
  1. 在这里明确指出会在启动时加载META-INF/spring.factories得出springboot启动时会加载spring.factories中的大量自动配置类并加载进properties
  2. 在spring.factories中进入一个自动配置类里面查看源码
  1. 这些自动配置类由@CondationalOnMissionBean等注解判断是否注入工厂
  1. 在application.yml中可以自定义相关配置
  1. 即只要在maven中导入相关依赖,spring.cache中可以通过判断注解将对应的自动配置类注入工厂,springboot就可以拿到配置类的属性,从而yml中就可以设置。属性和对应类的属性一一对应。
 
posted @   miaocat19  阅读(502)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示