Spring MVC系列-(1) Spring概述

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Spring MVC系列-(1) Spring概述

后端精进之路   2020-03-09 我要评论
![Spring.png](http://ww1.sinaimg.cn/large/a18449c6gy1gco2xb0bj9j20nn0cet8m.jpg) ## 1. Spring概述 本章主要介绍Spring中的体系结构和常见概念,比如bean、控制反转(Inverse of Control,IoC)等。 ### 1.1 体系结构 Spring 框架提供约 20 个模块,可以根据应用程序的要求来使用。 ![Screen Shot 2020-01-11 at 7.54.32 PM.png](http://ww1.sinaimg.cn/large/a18449c6gy1gasvb92cluj20n00k8whh.jpg) #### 核心容器 核心容器由核心,Bean,上下文和表达式语言模块组成,它们的细节如下: - **核心模块**提供了框架的基本组成部分,包括 IoC 和依赖注入功能。 - **Bean模块**提供 BeanFactory,它是一个工厂模式的复杂实现。 - **上下文模块**建立在由核心和 Bean 模块提供的坚实基础上,它是访问定义和配置的任何对象的媒介。ApplicationContext 接口是上下文模块的重点。 - **表达式语言模块**在运行时提供了查询和操作一个对象图的强大的表达式语言。 #### 数据访问/集成 数据访问/集成层包括 JDBC,ORM,OXM,JMS 和事务处理模块,它们的细节如下: JDBC 模块提供了删除冗余的 JDBC 相关编码的 JDBC 抽象层。 ORM 模块为流行的对象关系映射 API,包括 JPA,JDO,Hibernate 和 iBatis,提供了集成层。 OXM 模块提供了抽象层,它支持对 JAXB,Castor,XMLBeans,JiBX 和 XStream 的对象/XML 映射实现。 Java 消息服务 JMS 模块包含生产和消费的信息的功能。 事务模块为实现特殊接口的类及所有的 POJO 支持编程式和声明式事务管理。 #### Web Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下: * Web 模块提供了基本的面向 web 的集成功能,例如多个文件上传的功能和使用 servlet 监听器和面向 web 应用程序的上下文来初始化 IoC 容器。 * Web-MVC 模块包含 Spring 的模型-视图-控制器(MVC),实现了 web 应用程序。 * Web-Socket 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。 * Web-Portlet 模块提供了在 portlet 环境中实现 MVC,并且反映了 Web-Servlet 模块的功能。 #### 其他 还有其他一些重要的模块,像 AOP,Aspects,Instrumentation,Web 和测试模块,它们的细节如下: * AOP 模块提供了面向方面的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,它实现了应该分离的功能。 * Aspects 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。 * Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。 * Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。 * 测试模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。 ### 1.2 Bean Spring对Bean的官方定义如下: >在 Spring 中,**构成应用程序主干**并由**Spring IoC容器**管理的**对象**称为bean。**bean是一个由Spring IoC容器实例化、组装和管理的对象。** 由上面的定义可以得到如下3点信息: * bean是对象,一个或者多个不限定。 * bean由Spring IoC容器管理。 * 应用程序由一个个bean构成。 ### 1.3 控制反转(IoC)与依赖注入(DI) **控制反转**英文全称:Inversion of Control,简称就是IoC,这是管理Java实例协作关系的一种方式。这种方式还有另一个名称,**依赖注入(Dependency Injection)**,两者的含义相同。 传统方式下,当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时,通常有如下两种做法: * 原始做法: 调用者主动创建被依赖对象,然后再调用被依赖对象的方法。 * 简单工厂模式: 调用者先找到被依赖对象的工厂,然后主动通过工厂去获取被依赖对象,最后再调用被依赖对象的方法。 注意上面的**主动**二字,这必然会导致调用者与被依赖对象实现类的硬编码耦合,非常不利于项目升级的维护。 使用Spring框架之后,调用者无需主动获取被依赖对象,调用者只要被动接受Spring容器为调用者的成员变量赋值即可,由此可见,使用Spring后,**调用者获取被依赖对象的方式由原来的主动获取,变成了被动接受**——所以Rod Johnson(Spring框架创始人)称之为**控制反转**。 另外从Spring容器的角度来看,**Spring容器负责将被依赖对象赋值给调用者的成员变量——相当于为调用者注入它依赖的实例**,因此Martine Fowler称之为**依赖注入**。 >Spring IoC容器就是这样的辅助程序,它负责对象的生成和依赖的注入。类的实例化、依赖的实例化、依赖的传入都交由Spring IoC容器控制,而不是用new方式实例化对象、通过非构造函数方法传入依赖等常规方式。 ### 1.4 Bean的管理 在Spring的应用中,Spring容器负责创建对象,装配对象,配置它们以及管理它们的整个生命周期,从生存到死亡。 容器是Spring框架的核心,Spring自带了多个容器的实现。可以归纳为两种不同的类型: - **BeanFactory**(由org.springframework.beans.factory.BeanFactory接口定义)是最简单的容器,提供基本的DI支持。 - **应用上下文**(由org.springframework.context.ApplicationContext接口定义)基于BeanFactory构建,并提供应用框架级别的服务,例如从属性文件解析文本信息,以及发布应用事件给感兴趣的事件监听者。 通常情况下,会使用应用上下文来进行Bean的管理。Spring自带了多种类型的应用上下文,下面列举了几种常见的: ![Screen Shot 2020-01-11 at 10.23.44 PM.png](http://ww1.sinaimg.cn/large/a18449c6gy1gaszmpf5erj21100fc47t.jpg) 上面的上下文可以分为两类,加载配置文件和配置类。 - 加载文件 ![Screen Shot 2020-01-12 at 2.51.51 PM.png](http://ww1.sinaimg.cn/large/a18449c6gy1gats6o7ie4j20qs02amy2.jpg) - 加载配置类 ![Screen Shot 2020-01-12 at 2.52.04 PM.png](http://ww1.sinaimg.cn/large/a18449c6gy1gats7icfwzj20xq024gn3.jpg) --- 本文由『后端精进之路』原创,首发于博客 http://teckee.github.io/ , 转载请注明出处 搜索『后端精进之路』关注公众号,立刻获取最新文章和**价值2000元的BATJ精品面试课程**。 ![后端精进之路.png](http://ww1.sinaimg.cn/large/a18449c6gy1g9v9luujswj21n10l9jux.jpg)

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们