Spring框架和MVC原理

Spring框架和MVC原理

目录

回到顶部

Spring框架



Spring当前框架有20个jar包,大致可以分为6大模块:

  • Core Container
  • AOP and Instrumentation
  • Messaging
  • Data Access/Integration
  • Web
  • Test

Spring框架提供了非常丰富的功能,因此整个架构也很庞大。

在我们实际的应用开发中,并不一定要使用所有的功能,而是可以根据需要选择合适的Spring模块。

图-Spring框架图(官网文档)

Spring 关键策略

在介绍六大模块前,首先需要说明一下Spring的两大关键策略,这是Spring框架的基石。

(1)控制反转 (Inversion of Control),英文缩写IoC

应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。

也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。

控制反转主要有两方面:

  • 依赖注入 (Dependency Injection),缩写为DI
  • 依赖查找 (Dependency Lookup)

其中,依赖注入应用较为广泛。

依赖注入是一种技术,它是指组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。

容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。

通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)

(2)面向切面编程 (Aspect Oriented Programming),缩写为AOP

通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

核心容器 (Core Container)

IoC容器是Spring框架的核心。spring容器使用依赖注入管理构成应用的组件,它会创建相互协作的组件之间的关联。毫无疑问,这些对象更简单干净,更容易理解,也更容易重用和测试。

Spring自带了几种容器的实现,可归纳为两种类型:

(1)Bean工厂 

由 org.springframework.beans.factory.BeanFactory 接口定义。

它是最简单的容器,提供基本的DI支持。

(2)应用上下文 

由 org.springframework.context.ApplicationContext 接口定义。

它是基于BeanFactory 之上构建,并提供面向应用的服务,例如从属性文件解析文本信息的能力,以及发布应用事件给感兴趣的事件监听者的能力。

注:Bean工厂对于大多数应用来说往往太低级了,所以应用上下文使用更广泛。推荐在开发中使用应用上下文容器。 

Spring自带了多种应用上下文,最可能遇到的有以下几种:

以下为加载应用上下文示例

ApplicationContext context = new FileSystemXmlApplicationContext("D:\\Temp\\build.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("build.xml");

可以看到,加载 FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext 十分相似。

差异在于:前者在指定文件系统路径下查找build.xml文件;而后在所有类路径(包含JAR文件)下查找build.xml文件。

通过引用应用上下文,可以很方便的调用 getBean() 方法从 Spring 容器中获取 Bean。

相关jar包

spring-corespring-beans, 提供框架的基础部分,包括IoC和依赖注入特性。
spring-context, 在spring-core, spring-beans基础上构建。它提供一种框架式的访问对象的方法。
它也支持类似Java EE特性,例如:EJB,JMX和基本remoting。ApplicationContext接口是它的聚焦点。
springcontext-support, 集成第三方库到Spring application context。
spring-expression,提供一种强有力的表达语言在运行时来查询和操纵一个对象图。

AOP 和 Instrumentation

相关jar包

spring-aop,提供了对面向切面编程的丰富支持。

spring-aspects,提供了对AspectJ的集成。

spring-instrument,提供了对类instrumentation的支持和类加载器。

spring-instrument-tomcat,包含了Spring对Tomcat的instrumentation代理。

Messaging

相关jar包

spring-messaging,包含spring的消息处理功能,如Message,MessageChannel,MessageHandler。

数据访问与集成 (Data Access / Integaration)

Data Access/Integration层包含了JDBC / ORM / OXM / JMS和Transaction模块。

相关jar包

spring-jdbc,提供了一个JDBC抽象层。
spring-tx,支持编程和声明式事务管理类。
spring-orm,提供了流行的对象关系型映射API集,如JPA,JDO,Hibernate。
spring-oxm,提供了一个抽象层以支持对象/XML 映射的实现,如JAXB,Castor,XMLBeans,JiBX 和 XStream.
spring-jms,包含了生产和消费消息的功能。

Web

相关jar包

spring-web,提供了基本的面向web的功能,如多文件上传、使用Servlet监听器的Ioc容器的初始化。一个面向web的应用层上下文。

spring-webmvc,包括MVC和REST web服务实现。

spring-webmvc-portlet,提供在Protlet环境的MVC实现和spring-webmvc功能的镜像。

测试 (Test)

相关jar包

spring-test,以Junit和TestNG来支持spring组件的单元测试和集成测试。

回到顶部

SpringMVC工作原理



在上一篇章 [spring]01_环境配置 中,我们演示了一个简单的HelloWorld工程。

本篇章重点讲述SpringMVC的基本工作原理,让大家进一步加深认识。

SpringMVC工作流程描述

(1)向服务器发送HTTP请求,请求被前端控制器 DispatcherServlet 捕获。

(2)DispatcherServlet 根据 <servlet-name>-servlet.xml 中的配置对请求的URL进行解析,得到请求资源标识符(URI)。

然后根据该URI,调用 HandlerMapping 获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain 对象的形式返回。

(3)DispatcherServlet 根据获得的Handler,选择一个合适的 HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)。

(4)提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

  • HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。
  • 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等。
  • 数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等。
  • 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。

(5)Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;

(6)根据返回的ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet。

(7)ViewResolver 结合Model和View,来渲染视图。

(8)视图负责将渲染结果返回给客户端。

回到顶部

参考资料


Spring实战(第三版)

Spring官方文档——spring-framework-reference

http://blog.csdn.net/xtu_xiaoxin/article/details/8796499

分类: J2EE

标签: springMVC

时间: 2024-10-11 12:55:23

Spring框架和MVC原理的相关文章

好程序员Java干货分享Spring框架之IOC原理

好程序员Java干货分享Spring框架之IOC原理,前言:Spring框架是我们进行企业级开发的最常用框架,本章我们将了解Spring框架,并学习Spring的IOC特性以及IOC的实现原理:注解和反射. Spring框架简介 Spring是一种轻量级的控制反转(IOC)和面向切面编程(AOP)的容器框架,能够为企业级开发提供一站式服务. Spring的优点有 1.方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度

Spring框架介绍和原理

SpringMVC框架介绍 1) Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架.通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术.Velocity.Til

(转)【Spring框架】&lt;mvc:default-servlet-handler/&gt;的作用

优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往使用 *.do . *.xhtml等方式.这就决定了请求URL必须是一个带后缀的URL,而无法采用真正的REST风格的URL. 如果将DispatcherServlet请求映射配置为"/",则Spring MVC将捕获Web容器所有的请求,包括静态资源的请求,Spring MVC会将它们当

关于spring框架工作原理的初解

一:spring基本概念 1)struts2是web框架,hibernate是orm框架 2)spring是容器框架,创建bean,维护bean之间的关系 3)spring可以管理web层,持久层,业务层,dao层,spring可以配置各个层的组件,并且维护各个层的关系 二:spring核心原理 1.IOC控制反转 概念:控制权由对象本身转向容器,由容器根据配置文件创建对象实例并实现各个对象的依赖关系. 核心:bean工厂 IoC(Inverse of Control)的字面意思是控制反转,它包

spring mvc 原理(一)

文章来自http://jinnianshilongnian.iteye.com/blog/1594806 1:使用spring mvc 的好处 √让我们能非常简单的设计出干净的Web层和薄薄的Web层: √进行更简洁的Web层的开发: √天生与Spring框架集成(如IoC容器.AOP等): √提供强大的约定大于配置的契约式编程支持: √能简单的进行Web层的单元测试: √支持灵活的URL到页面控制器的映射: √非常容易与其他视图技术集成,如Velocity.FreeMarker等等,因为模型数

Spring MVC原理及配置详解

Spring MVC原理及配置 1.Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中. Spring MVC主要由DispatcherServlet.处理器映射.处理器(控制器).视图解析器.视图组成.他的两个核心是

Spring MVC原理及配置

Spring MVC原理及配置 1. Spring MVC概述 Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中. Spring MVC主要由DispatcherServlet.处理器映射.处理器(控制器).视图解析器.视图组成. 2. Spr

Spring核心框架 - AOP的原理及源码解析

一.AOP的体系结构 如下图所示:(引自AOP联盟) 层次3语言和开发环境:基础是指待增加对象或者目标对象:切面通常包括对于基础的增加应用:配置是指AOP体系中提供的配置环境或者编织配置,通过该配置AOP将基础和切面结合起来,从而完成切面对目标对象的编织实现. 层次2面向方面系统:配置模型,逻辑配置和AOP模型是为上策的语言和开发环境提供支持的,主要功能是将需要增强的目标对象.切面和配置使用AOP的API转换.抽象.封装成面向方面中的逻辑模型. 层次1底层编织实现模块:主要是将面向方面系统抽象封

Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis

https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=63 https://www.zhihu.com/question/29444491/answer/146457757 1. Java - Struts框架教程Struts 是Apache软件基金会(ASF)赞助的一个开源项目.通过采用JavaServlet/JSP技术,实现了基于Java EEWeb