Java框架:Spring框架

news2024/11/16 11:42:12

文章目录

  • 一、Spring概念
  • 二、Spring特征
  • 三、Spring基本架构
    • 3.1Spring体系结构
    • 3.2Core Container(核心容器)
    • 3.3Data Access/Integration(数据访问/集成)
    • 3.4Web(MVC/Remoting)
    • 3.5Test(测试)
    • 3.6AOP(面向切面编程)
  • 四、Spring主要jar包
  • 五、Spring用到的设计模式

一、Spring概念

什么是Spring?

Spring是一个轻量级的开源框架, 主要是为了解决企业应用程序(J2EE)开发复杂性而创建(简化Java开发)。

为了降低Java开发的复杂性,Spring采取以下几种关键策略:

  1. 基于POJO的轻量级和最小侵入性编程;
  2. 通过依赖注入和面向接口实现松耦合;
  3. 基于切面进行声明式编程和减少样板代码。

Spring设计目标

Spring为开发提供一个一站式轻量级应用开发平台。

Spring设计理念

在JavaEE开发中,支持POJO和JavaBean开发方式,可以面向接口开发,通过IOC实现对象耦合关系的管理,并实现依赖反转,将对象之间的依赖关系交给IOC容器管理,实现解耦。

Spring的核心

IOC容器和AOP模块。通过IOC容器管理POJO对象以及他们之间的联系;通过AOP以动态非侵入式的方式增强服务。

Spring应用场景

J2EE企业应用开发,包括SSH、SSM等。

二、Spring特征

  1. 轻量: 完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
  2. 控制反转(IOC- Inversion of Control ):Spring通过控制反转技术降低代码的耦合度,能把一个对象依赖的其他对象通过被动的方式传递进来(DI- Dependency Injection ),而不是这个对象自己创建或者查找依赖对象。 它的底层设计模式采用了工厂模式,所有的 Bean 都需要注册到Bean工厂中,将其初始化和生命周期的监控交由工厂实现管理。程序员只需要按照规定的格式进行Bean开发,然后利用XML文件进行bean 的定义和参数配置,其他的动态生成和监控就不需要调用者完成,而是统一交给了平台进行管理。
  3. 面向切面(AOP- Aspect Oriented Programming ):Spring支持面向切面的编程,并把业务逻辑与系统服务分开,开发人员只要注重业务逻辑就行。
  4. 容器:Spring包含管理应用对象(bean)的配置和生命周期,可以开发自己配置bean的创建、初始化、销毁等。 核心通过Bean factory实现了底层的类的实例化和生命周期的管理。
  5. 框架:Spring将简单的组件组成复杂的应用;对应用对象被声明的组合可以在XML文件里;提供多种功能,例如事务、其他框架的集成等。
  6. MVC: 客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发,控制器调用一个用于映射的类HandlerMapping,该类用于将请求映射到对应的处理器来处理请求。HandlerMapping 将请求映射到对应的处理器Controller(相当于Action)在Spring 当中如果写一些处理器组件,一般实现Controller 接口,在Controller 中就可以调用一些Service 或DAO 来进行数据操作 ModelAndView 用于存放从DAO 中取出的数据,还可以存放响应视图的一些数据。 如果想将处理结果返回给用户,那么在Spring 框架中还提供一个视图组件ViewResolver,该组件根据Controller 返回的标示,找到对应的视图,将响应response 返回给用户。

三、Spring基本架构

3.1Spring体系结构

Spring 框架是是一个分模块存在,除了核心的Spring Core Container外是必要模块,其他20多个模块是可选的:

在这里插入图片描述

3.2Core Container(核心容器)

Core Container(核心容器):核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开 。


核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring 表达式语言-Spring Expression Language)等模块组成,它们的细节如下:

  • spring-core模块:提供了框架的基本组成部分,包括 IOCDI 功能。
  • spring-beans模块:提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。
  • spring-context模块:建立在由 spring-corespring-beans 模块的基础上建立起来的,它以一种类似于 JNDI 注册的方式访问对象。Context 模块继承自 Bean 模块,并且添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过 Servelet 容器)等功能。Context 模块也支持 Java EE 的功能,比如 EJB、JMX 和远程调用等。ApplicationContext 接口是 Context 模块的焦点。spring-context-support 提供了对第三方集成到 Spring 上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
  • spring-expression块:提供了强大的表达式语言,用于在运行时查询和操作对象图。它是 JSP2.1 规范中定义的统一表达式语言的扩展,支持 set 和 get 属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从 Spring IoC 容器检索对象,还支持列表的投影、选择以及聚合等。

它们的依赖关系如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMgITTfI-1671256722623)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1671200641615.png)]

3.3Data Access/Integration(数据访问/集成)

数据访问/集成层包括 JDBC( Java Data Base Connectivity )ORM( Object Relational Mapping )OXM( Object XML Mapping )JMS( Java Message Service ) 事务处理模块,它们的细节如下:

  • JDBC模块:提供了 JDBC 抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。
  • ORM模块:提供了对流行的对象关系映射 API 的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 spring的其它功能整合,比如前面提及的事务管理。
  • OXM模块:提供了对 OXM 实现的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等。
  • JMS模块:包含生产(produce)和消费(consume)消息的功能。从 Spring 4.1 开始,集成了 spring-messaging 模块。
  • 事务模块:为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。(注:编程式事务需要自己写 beginTransaction()、commit()、rollback() 等事务管理方法,声明式事务是通过注解(@Transactional)或配置由 spring 自动处理,编程式事务粒度更细)

3.4Web(MVC/Remoting)

Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下:

  • Web 模块:提供面向 web 的基本功能和面向 web 的应用上下文,比如多部分(multipart)文件上传功能、使用 Servlet 监听器初始化 IOC 容器等。它还包括 HTTP 客户端以及 Spring 远程调用中与 web 相关的部分。
  • Web-MVC模块:为 web 应用提供了模型视图控制(MVC)和 REST Web服务的实现。Spring 的 MVC 框架可以使领域模型代码和 web 表单完全地分离,且可以与 Spring 框架的其它所有功能进行集成。
  • Web-Socket模块:为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。
  • Web-Portlet模块:提供了用于 Portlet 环境的 MVC 实现,并反映了 spring-webmvc 模块的功能。

3.5Test(测试)

Test 模块:Spring 支持 Junit TestNG 测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。

3.6AOP(面向切面编程)

四、Spring主要jar包

  • org.springframework:spring-core:spring的核心,其他jar包依赖此包
  • org.springframework:spring-beans:所有应用都用到,包含访问配置文件,创建和管理bean等。
  • org.springframework:spring-aop:spring的面向切面编程,提供AOP的实现。
  • org.springframework:spring-context:提供在基础IOC功能上的扩展服务,还提供许多企业级服务的支持,例如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及多种视图层框架的支持。
  • org.springframework:spring-webmvc:包含spring mvc 应用开发时所需的核心类。
  • org.springframework:spring-web:包含web应用开发时,所需的核心类。
  • org.springframework:spring-jdbc:对JDBC的简单封装。
  • org.springframework:spring-tx:spring transaction,为JDBC、Hibernate、JDO、JPA提供一致的声明式和编程式事务管理。
  • org.springframework:spring-context-support:对spring context的扩展,用于MVC方面。
  • org.springframework:spring-expression:spring表达式语言
  • org.springframework:spring-jms:简化jms api的使用,简单的封装了一下。
  • org.springframework:spring-aspects:spring提供对AspectJ框架的整合。
  • org.springframework:spring-test:对Junit等测试框架等简单封装。
  • org.springframework:spring-orm:整合第三方orm的实现,例如hibernate、ibatis、jdo、jap等。
  • org.springframework:spring-oxm:sping对object/xml映射的支持,对java和xml来回切换。

五、Spring用到的设计模式

  1. 工程模式:BeanFactory就是简单工厂模式的实现,用来创建对象的实例。
  2. 单例模式:Bean的默认为单例模式。
  3. 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术。
  4. 模板方法:用来解决代码重复问题,例如RestTemplate、JmsTemplate等。
  5. 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变,所有依赖于它的对象都会得到通知被动更新,例如Spring的listener的实现:ApplicationListener

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue学习笔记(三)-组件化编程基础

概念 传统方式与组件化对比 存在问题 1.依赖关系混乱 2.代码复用率不高 模块与组件、模块化与组件化的关系 模块 a.理解:向外提供特定功能的 js 程序,一般就是一个 js 文件 b.为什么:js 文件很多很复杂 c.作用:复用、简化 …

【Docker技术内幕】(十二)使用docker安装Kafka

目录 一、准备工作 1、安装docker 2、设置加速镜像 二、开始安装 1、启动容器 三、验证Kafka是否安装成功 四、部署kafka-manager 一、准备工作 1、安装docker 参考 【Docker技术内幕】(四)Linux环境下安装docker 2、设置加速镜像 vim /etc/do…

C语言 数据存储 char int 数据存储 关于原码反码补码

上图 前五个整形是整形家族,为什么char也是 因为他是字符型 字符实际存储的时候寸的是这个的ascll值 ascll值是个整数 除了以上两种 还有构造类型 又叫自定义类型 为什么又数组类型 如下代码 arr和【】的内容都可以自定义 为什么出现以上情况.(ffff 是16进制表示…

第二证券|通过磁铁制造功率更大的电动汽车电池

德克萨斯大学奥斯汀分校的研讨人员表明,一个更厚的电极,经过磁优化的离子道路,能够使充电更快,充电之间的功率更大。 研讨人员制作了一种具有‘快速通道’摆放的电极,以进步充电速度和续航路程。 研讨人员发现了一种共…

Apache Hudi 数据湖介绍

目录​​​​​​​ Apache Hudi 数据湖介绍 Hudi 历程 Hudi Features Apache Hudi 数据湖介绍 Apache Hudi(发音为“hoodie”)是下一代流媒体数据湖平台源于Uber 。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的追加…

[附源码]Nodejs计算机毕业设计基于云数据库的便民民宿租赁系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

人人都能看懂的Spring底层原理,看完绝对不会懵逼

人人都能看懂的Spring原理,绝对不会懵逼为什么要使用Spring?Spring的核心组件Spring是如何实现IOC和DI的?定义了BeanDefinition扫描加载BeanDefinition根据BeanDefinition进行Bean的实例化和初始化实例化属性赋值保存到单例缓冲池一个Bean从创…

docker高级篇2-分布式存储之三种算法

面试题: 1~2亿条数据需要缓存,请问如何设计这个缓存案例? 答:单机单台100%是不可能的。肯定是分布式缓存的。那么用Redis如何落地? 一般有三种方案: 哈希取余分区;一致性哈希算法分区&#…

HttpRunner4.x 安装与使用

HttpRunner4.x 安装与使用HttpRunner4.x 安装与使用安装使用运行脚手架项目方式一:录制生成用例步骤1:导出har文件步骤2:转化成测试用例文件步骤3:执行测试用例方式二:手工编写测试用例HttpRunner4.x 安装与使用 以下…

卡塔尔世界杯终局之战,阿根廷VS法国,是老将加冕还是新王登基?

【世界杯】阿根廷VS法国 不知不觉,世界杯已经走到最后的尾声,此前经历的28天,63场比赛皆是铺垫,卢赛尔体育场将会迎来2022卡塔尔世界杯最终的决赛,究竟是梅西球王加冕还是法国卫冕世界杯冠军,今晚23&#x…

KNN算法 鸢尾花种类预测

目录 一:KNN原理 二:数据处理 三:超参调试、模型保存及使用 四:鸢尾花种类预测 详细步骤 一:KNN原理 从训练集中找到跟待测数据最近的k条记录 根据这些记录的分类决定新数据的分类 主要因素包括有:K邻…

java------JVM之类加载和双亲委派机制

类加载器:加载.class文件。 将新建的对象放入堆里面,而对象的引用(地址)放到栈,其中引用指向堆里面对应的对象。 1-启动类加载器,负责加载jre\lib目录下的rt.jar包c编写,加载java核心库 java.*,构造ExtClassLoader和A…

[CocosCreator]封装行为树(一)

(老规矩:广告位留给自己) 欢迎喜欢或者从事CocosCreator开发的小伙伴请加入我的大家庭CocosCreator游戏开发Q群:26855530 行为树的定义:控制AI实体决策流程的分层节点树。游戏中Npc的活动,或者主角挂机行为都十分依赖行为树,本章开始,封装适用CococCreator使用的TypeScript行…

Mongo基本操作

文章目录核心概念库<DataBase>集合<Collection>文档<Document>MySQL与MongoDB关系总结基本操作库<database>集合<Collection>文档<document>文档查询ANDORAND 和 OR 联合模糊查询排序分页总条数去重指定返回字段索引<index>操作复合…

vmware ESXI 7 升级ESXI 8

1 、上传VMware-Esxi-8.0安装包 2开启ssh 3、 远程登录到Esxi主机 ssh root192.168.31.119 [rootlocalhost:~] 4、升级到Esxi 8.0 [rootlocalhost:~] esxcli software sources profile list -d /vmfs/volumes/datastore1/iso/VMware-ESXi-8.0-20513097-depot.zip Name Vend…

软件设计师——项目管理

文章目录Gantt图与Pert图风险管理配置管理沟通管理题目举例Gantt图与Pert图 甘特图能够清晰描述每个任务的开始 / 结束时间及各任务之间的并行性&#xff0c;也可以动态地反映项目的开发进展情况&#xff0c;但难以反映多个任务之间存在的逻辑关系&#xff1b;PERT 利用项目的…

基于 Tensorflow 2.x 实现 BP 神经网络,实践 MNIST 手写数字识别

一、MNIST 数据集 MNIST 是一个非常有名的手写数字识别数据集&#xff0c;在很多资料中都会被用作深度学习的入门样例。在 Tensorflow 2.x 中该数据集已被封装在了 tf.keras.datasets 工具包下&#xff0c;如果没有指定数据集的位置&#xff0c;并先前也没有使用过&#xff0c…

【Java语言】— Java基础语法01

Java基础语法 1.注释 什么是注释 注释是写在程序中对代码进行解释说明的文字&#xff0c;方便自己和他人查看&#xff0c;以便理解程序。 注释有哪些 &#xff08;1&#xff09;单行注释 // 注释内容&#xff0c;只能写一行&#xff08;2&#xff09;多行注释 /* 注释内…

数据结构---判断一个数是否为2的整数次幂

判断一个数是否为2的整数次幂穷举法JAVA实现移位操作优化性能JAVA实现按位与JAVA实现实现一个方法&#xff0c;来判断一个正整数是否是2的整数次幂&#xff08;如16是2的4次方&#xff0c;返回true&#xff1b;18不是2的整数次幂&#xff0c;则返回false&#xff09;。要求性能…

BFS——Flood Fill模型及最短路模型

文章目录Flood Fill模型概述模板池塘计数城堡问题山峰和山谷最短路模型概述迷宫问题武士风度的牛抓住那头牛总结Flood Fill模型 概述 定义 从一个起始节点开始把附近与其连通的节点提取出或填充成不同颜色颜色&#xff0c;直到封闭区域内的所有节点都被处理过为止&#xff0c…