Spring | Spring的基本应用
目录:
- 1.什么是Spring?
- 2.Spring框架的优点
- 3.Spring的体系结构 (重点★★★) :
- 3.1 Core Container (核心容器) ★★★
- Beans模块 (★★★) : BeanFactory
- Core核心模块 (★★★) : IOC
- Context上下文模块 (★★★) : ApplicationContext
- Context-support模块 (★★★)
- SpEL模块
- 3.2 Data Access / Integration (数据访问/集成)
- JDBC模块 (★★★)
- ORM模块
- OXM模块
- JMS模块
- Transactions事务模块 (★★★)
- 3.3 Web
- WebSocket模块
- Servlet模块 (★★★)
- Web模块 (★★★)
- Portlet模块
- 3.4 其他模块
- AOP模块 (★★★)
- Aspects模块 (★★★)
- Instrumentation模块
- Messaging模块
- Test模块 (★★★)
- 4.Spring的核心容器 :
- 4.1 BeanFactory 容器
- 4.2 ApplicationContext 容器
- 4.2.1 创建ApplicationContext 容器 的方式
- 通过 ClassPathXmlApplicationContext 创建
- 通过 FileSystemXmlApplicationContext 创建
- 通过 ContextLoaderListener 创建 (通过web.xml配置文件创建) (★★★常用)
- 4.2.2 获得Spring容器中Bean的方式 :
1.什么是Spring?
Spring是由Rod Johnson组织和开发的一个分层的Java SE/EE full-stack (一站式 )轻量级开源框架。
Spring 以 IOC( Inversion of Control,控制反转)和 AOP ( Aspect Oriented Programming,面向切面编程)为 内核。
Spring 使用基本JavaBean来完成以前只可能由EJB ( Enterprise Java Beans,Java企业Bean)完成的工作,取代了EJB的臃肿、低效的开发模式。
Spring 致力于Java EE应用各层的解决方案。
在 表现层 它提供了Spring MVC等功能;
在 业务逻辑层 可以管理事务、记录日志等;
在 持久层 可以整合MyBatis 等技术。
虽然Spring贯穿于表现层、业务逻辑层和持久层,但它并不想取代那些已有的框架,而是以高度的开放性与它们进行无缝整合。
2.Spring框架的优点
非侵入式设计
Spring是一种非侵入式( non-invasive )框架,它可以使应用程序代码对框架的依赖最小化。方便解耦、简化开发
Spring就是一个大工厂, 可以将所有对象的创建和依赖关系的维护工作都交给Spring容器
管理,大大地降低了组件之间的耦合性。支持AOP
Spring提供了对AOP的支持,它允许将一些通用任务, 如安全、事务、日志等进行集中
处理,从而提高了程序的复用性。支持声明式事务处理
只需要通过配置就可以完成对事务的管理,而无须手动编程。
方便程序的测试
Spring提供了对Junit4的支持,可以通过注解方便地测试Spring程序。方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持。降低JavaEE API的使用难度
Spring对Java EE开发中非常难用的一些API (如JDBC、JavaMail 等),都提供了封
使这些API应用难度大大降低。
3.Spring的体系结构 (重点★★★) :
Spring框架采用的是分层架构,它一系列的功能要素被分成20个模块,这些模块大体分为
Core Container (核心容器)、 Data Access/Integration (数据访问/集成)、 Web、
AOP ( Aspect Oriented Programming)、Instrumentation、Messaging 和 Test。
如下图所示。
3.1 Core Container (核心容器) ★★★
- Spring的核心容器 是其他模块建立的基础,它主要由①Beans模块、②Core核心模块、
③Context 模块、④Context- support模块 和 ⑤SpEL ( Spring Expression Language, Spring表达式语言)模块组成。
Beans模块 (★★★) : BeanFactory
Beans模块:提供了 BeanFactory, 是工厂模式的经典实现,Spring将管理对象称为Bean。 ( BeanFactory在下面详讲 )
Core核心模块 (★★★) : IOC
Core核心模块:提供了Spring框架的 基本组成部分,包括 IOC 和DI功能。
ps :
Spring以IOC( Inversion of Control,控制反转)和 AOP ( Aspect Oriented Programming,面向切面编程)为 内核。
Context上下文模块 (★★★) : ApplicationContext
Context上下文模块 : 建立在Core和Beans模块的基础之上,它是访问定义和配置的任何对象的媒介。其中 ApplicationContext接口是上下文模块的焦点。
Context-support模块 (★★★)
Context-support模块 : 提供了对第三方库嵌入Spring 应用的集成支持。
比如 缓存( EhCache、Guava、 JCache )、邮件服务( JavaMail)、任务调度( CommonJ、Quartz )和 模板引擎( FreeMarker、JasperReports、速率)。
SpEL模块
SpEL模块:是Spring 3.0后新增的模块,它提供了 Spring Expression Language支持。
3.2 Data Access / Integration (数据访问/集成)
数据访问/集成层包括JDBC、ORM、OXM、JMS和 Transactions 模块
JDBC模块 (★★★)
JDBC模块:提供了一个JDBC的抽象层,大幅度地减少了在开发过程中对数据库操作的编码。
ORM模块
ORM模块:对流行的对象关系映射API, 包括JPA、JDO和Hibernate提供了集成层。
OXM模块
OXM模块:提供了一个支持对象/ XML映射的抽象层实现,如JAXB、Castor、XMLBeans、JiBX和XStream。
JMS模块
JMS模块 : 指Java消息传递服务,包含使用和产生信息的特性,自4.1版本后支持与Spring-message模块的集成。
Transactions事务模块 (★★★)
Transactions事务模块 : 支持对实现特殊接口以及所有POJO类的编程和声明式的 事务管理。
3.3 Web
Spring的 Web层 包括WebSocket、Servlet、 Web 和Portlet模块。
WebSocket模块
WebSocket模块: Spring 4.0以后新增的模块,它提供了WebSocket和SockJS的实现,以及对STOMP的支持。
Servlet模块 (★★★)
Servlet模块 : 也称为Spring-webmvc模块,包含了Spring的模型–视图—控制器( MVC) 和 REST Web Services实现的 Web应用程序。
Web模块 (★★★)
Web模块 :提供了 基本的Web开发集成特性,例如:多文件上传功能、使用Servlet监听器来初始化loC容器以及Web应用上下文。
Portlet模块
Portlet模块 : 提供了在Portlet环境中使用MVC实现,类似Servlet模块的功能。
3.4 其他模块
Spring的 其他模块 还有AOP、Aspects、 Instrumentation 、Messaging以及Test模块。
AOP模块 (★★★)
AOP模块:提供了 面向切面编程 实现,允许定义方法拦截器和切入点,将代码按照功能进行分离以降低耦合性
ps :
Spring以IOC( Inversion of Control,控制反转)和 AOP ( Aspect Oriented Programming,面向切面编程)为 内核。
Aspects模块 (★★★)
Aspects模块:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的 面向切面编程( AOP)框架。
( Aspects 是一个AOP框架。)
Instrumentation模块
Instrumentation模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
Messaging模块
Messaging模块: Spring 4.0以后新增的模块,它提供了对消息传递体系结构和协议.
Test模块 (★★★)
Test模块:提供了对单元测试和集成测试的支持。
4.Spring的核心容器 :
Spring框架的 主要功能 是通过其核心容器来实现的。
Spring 框架提供了两种核心容器 : ① BeanFactory容器 ② ApplicationContext容器
创建Spring容器后,就可以获取Spring容器中的Bean。Spring获得Bean的实例有以下 两种方法:
① Object.getBean( String name)
② T getBean(Class requiredType)
4.1 BeanFactory 容器
- BeanFactory由org.springframework.beans.facytory.BeanFactory接口定义,是基础类型的IOC容器,它提供了完整的loC服务支持。
- BeanFactory 就是一个 管理Bean的工厂, 它主要负责初始化各种Bean,并调用它们的生命周期方法。
4.2 ApplicationContext 容器
- ApplicationContext是BeanFactory的子接口,也被称为 应用上下文,是另一种常用的Spring核心容器。
- ApplicationContext 是org springframework.context.ApplicationContext接口定义,不仅包含了BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播等方面的支持。
4.2.1 创建ApplicationContext 容器 的方式
通过 ClassPathXmlApplicationContext 创建
通过 ClassPathXmlApplicationContext 创建 :
ClassPathXmlApplicationContext 会从==类路径 classPath== 中寻找指定的XML配置文件,找到并装载完 成ApplicationContext的实例化工作,其使用语法如下。通过 ClassPathXmlApplicationContext 创建 语法 为 :
ApplicationContext applicationContext = new ClassPathXmlApplicationContext (String configLocation);
上述代码中,configLocation 参数用于指定Spring 配置文件的名称和位置。如果其值为
“applicationContext.xml",则Spring会去 类路径中查找名称为applicationContext.xml的配置文件。
通过 FileSystemXmlApplicationContext 创建
通过 FileSystemXmlApplicationContext 创建 :
FileSystemXmlApplicationContext 会从指定的文件系统路径( 绝对路径 )中寻找指定的XML
配置文件,找到并装载完成ApplicationContext的实例化工作。通过 FileSystemXmlApplicationContext 创建 语法为 :
ApplicationContext applicationContext = new FileSystemXmlApplicationContext (String configLocation);
与ClassPathXmlApplicationContext 有所不同的是,FileSystemXmlApplicationContext 在读取Spring 的配置文件时,不再从类路径中读取配置文件,而是通过参数指定配置文件的位置 (通过绝对路径来找),例如“D:/workspaces/applicationContext.xml" 。这种采用绝对路径的方式,会导致程序的灵活性变差,所以 这个方法一般不推荐使用。
通过 ContextLoaderListener 创建 (通过web.xml配置文件创建) (★★★常用)
在Web项目中,ApplicationContext容器的实例化工作会交由Web服务器来完成,Web服务器实例化ApplicationContext容器时,通常会使用基于 ContextLoaderListener 实现的方式,此种方式只需要在web.xml中添加如下代码 :
<!--指定Spring配置文件的位置,多个配置文件时,以逗号分隔--><context-param><param-name>contextConfigLocation</param-name><!-- Spring将加载spring目录下的applicationContext . xml文件--><!-- classpath: 以类路径的方式加载 --><param-value> classpath:spring/applicationContext.xm1</param-value></context-param><!-- 指定以ContextLoaderListener方式启动Spring容器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
通过在web.xml中配置 ApplicationContext 的相关信息,Web服务器会完成实例化的工作。
在三大框架整合以及项目时,也将会基于ContextLoaderListener的方式,由由Web服务器来实例化ApplicationContext 容器 (web服务器来完成 ApplicationContext 容器的创建)。
4.2.2 获得Spring容器中Bean的方式 :
创建Spring容器后,就可以获取Spring容器中的Bean。Spring获得Bean的实例有以下 两种方法:
- Object.getBean( String name):
Object getBean(String name) : 根据容器中Bean的 id 或 name 来获取指定的Bean,获取之后需要进行强制类型转。- T getBean(Class requiredType): 根据 类的类型 来获取Bean的实例。由于此方法为泛型方法,因此在获取Bean之后不需要进行强制类型转换。
相关文章:

Spring | Spring的基本应用
目录: 1.什么是Spring?2.Spring框架的优点3.Spring的体系结构 (重点★★★) :3.1 Core Container (核心容器) ★★★Beans模块 (★★★) : BeanFactoryCore核心模块 (★★★) : IOCContext上下文模块 (★★★) : ApplicationContextContext-support模块 (★★★)SpE…...

项目开发维护技术文档(梳理总结中)
目录 项目名称——惠誉灵境 一、项目背景 二、架构设计 1.技术栈 2.架构图 3.代码结构 三、模块划分 1.平台首页 2.登录模块 3.系统模块 (1)系统首页 (2)组织架构 (3)权限管控 ①角色管理 (4&am…...

【接口测试】Apifox实用技巧干货分享
前言 不知道有多少人和我有着这样相似的经历:从写程序只要不报错就不测试😊,到写了程序若是有bug就debug甚至写单元测试,然后到了真实开发场景,大哥和你说,你负责的功能模块的所有接口写完要测试一遍无误在…...

车联网架构设计(一)_消息平台的搭建
车联网是物联网的一个主要应用方向,车辆通过连接车联网平台,实时进行消息的交互,平台可以提供车辆远程控制,故障检测,车路协同等各方面的功能。 我在车联网行业从事了很长时间的技术工作,参与了整个车联网…...

(蓝桥杯)1125 第 4 场算法双周赛题解+AC代码(c++/java)
题目一:验题人的生日【算法赛】 验题人的生日【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路: 1.又是偶数,又是质数,那么只有2喽 AC_Code:C #include <iostream> using namespace std; int main() {cout<<2;return 0; …...

也可Adobe Animate
Animate CC 由原Adobe Flash Professional CC 更名得来,2015年12月2日:Adobe 宣布Flash Professional更名为Animate CC,在支持Flash SWF文件的基础上,加入了对HTML5的支持。并在2016年1月份发布新版本的时候,正式更名为…...

【面试HOT200】回溯篇
系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于【CodeTopHot300】进行的,每个知识点的修正和深入主要参…...

JVM——内存溢出和内存泄漏
目录 1. 内存溢出和内存泄漏内存泄漏的常见场景解决内存溢出的思路1.发现问题 – Top命令2.发现问题 – VisualVM3.发现问题 – Arthas4.发现问题 – Prometheus Grafana5.发现问题 – 堆内存状况的对比
《凤凰项目》读书笔记
文章目录 一、书名和作者二、书籍概览2.1 主要论点和结构2.2 目标读者和应用场景 三、核心观点与主题3.1 DevOps的核心原则与文化变革3.2 持续交付与自动化3.3 变更管理与风险控制3.4 关键绩效指标与持续改进 四、亮点与启发4.1 最有影响的观点4.2 对个人专业发展的启示 五、批…...

熬夜会秃头——beta冲刺Day4
这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day4团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 一、团队成员会议总结 1、成员工作进…...

HTML5+CSS3+Vue小实例:浪漫的心形文字动画特效
实例:浪漫的心形文字动画特效 技术栈:HTML+CSS+Vue 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conte…...

数据结构-基数排序
基数排序 基本思想 基数排序其实就是依靠多位关键字进行排序,现在我们有一个数据为101,那么“101”就是一个三位 关键字,分别为:“百位->1”、“十位->0”、“个位->1”。 此时我们就可以按照三位关键字进行排序&…...

基于ASP.NET MVC技术的图书管理系统的设计与实现
基于ASP.NET MVC技术的图书管理系统的设计与实现 摘要:图书管理系统是一套高新科学技术和图书知识信息以及传统历史文化完美结合的体现。它改变了传统图书收藏的静态书本式图书服务特征,实现了多媒体存取、远程网络传输、智能化检索、跨库无缝链接、创造…...

C++17中的结构化绑定
C17中的结构化绑定(structured binding):将指定名称绑定到初始化程序的子对象或元素。简而言之,它们使我们能够从元组或结构中声明多个变量。与引用一样,结构化绑定是现有对象的别名;与引用不同,结构化绑定不必是引用类型(referen…...

Mover Creator 用户界面
1 “开始”对话框 首次打开 Mover Creator 时,出现的第一个页面是“开始”对话框,如下所示。从这里开始,用户可以选择开始设计飞机、武器或发动机。在上述每种情况下,用户都可以创建新模型或编辑现有模型。 1.1 新建模型 如果用…...

『Nginx安全访问控制』利用Nginx实现账号密码认证登录的最佳实践
📣读完这篇文章里你能收获到 如何创建用户账号和密码文件,并生成加密密码配置Nginx的认证模块,实现基于账号密码的登录验证 文章目录 一、创建账号密码文件1. 安装htpasswd工具1.1 CentOS1.2 Ubuntu 二、配置Nginx三、重启Nginx 在Web应用程…...

MongoDB导入导出命令
(1)mongoexport命令 例如: mongoexport --db testdb --collection person --out person.json mongoexport --db testdb --collection person --fields name,age --out person.json mongoexport --db testdb --collection person --query {&qu…...

软件工程期末复习(1)
学习资料 软件工程知识点总结_嘤桃子的博客-CSDN博客 软件工程学习笔记_软件工程导论第六版张海藩pdf-CSDN博客 【软件工程】软件工程期末试卷习题课讲解!!_哔哩哔哩_bilibili 【拯救者】软件工程速成(期末考研复试软考)均适用. 支持4K_哔哩哔哩_bil…...

nextjs入门
创建项目 npx create-next-app 项目名 体验文件路由 nextjs提供了文件路由的功能, 根据文件系统的目录结构, 可以识别为对应的页面路由 创建页面 首先, 在src下创建pages目录, 然后创建一个about文件(对应about页面)和main/index.js文件(对应首页) pages/main/index con…...

【C语言】字符串函数strlen #strcpy #strcmp #strcat #strstr及其模拟实现
在C语言中,有一种特殊的数据类型,即字符串类型。C 并没有专门定义一个字符串类型,这对我们使用字符串造成了一定的麻烦。但是,C标准库<string.h> 中定义了各种字符串函数,这对于我们来说是一件值得庆幸的事情。…...

递归实现组合型枚举
递归实现组合型枚举 #include<iostream> #include<vector>int n, m; std::vector<int>res; bool st[30];void Print() {for(int i0;i<res.size();i){printf("%d ",res[i]);}puts(""); }void dfs(int num) {if (res.size() m){Print(…...

SCAU:1065 数组中的指针
1065 数组中的指针 时间限制:1000MS 代码长度限制:10KB 提交次数:3436 通过次数:1692 题型: 编程题 语言: G;GCC Description 设有如下数组定义: int a[3][4]{{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 计算下面各项的值(设数组a的首地址为2000&…...

找不到msvcp110.dll如何修复?分享5个亲测有效的修复方法
在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp110.dll丢失”。这个错误通常发生在运行某些程序时,系统无法找到所需的动态链接库文件。那么,msvcp110.dll到底是什么呢?它又有什么作用࿱…...

LeetCode刷题笔记第80题:删除有序数组中的重复项 II
LeetCode刷题笔记第80题:删除有序数组中的重复项 II 题目: 删除升序数组中超过两次的元素后的数组长度 想法: 使用快慢指针的方法完成,使用快指针遍历整个数组,使用慢指针完成相同元素最多保留两个。在快指针遍历到…...

【开源存储】minio对象存储部署实践
文章目录 一、前言1、介绍说明2、部署方式3、冗余模式4、约束限制4.1、规格参数4.2、API支持a、minio不支持的Amazon S3 Bucket APIb、minio不支持的Amazon S3 Object API 二、部署说明1、软件安装2、minio单机部署3、minio分布式部署3.1、前置条件3.2、开始运行3.3、操作说明 …...

Java编程强化练习(二)
表达式计算(支持空格,连乘,连除)(选做题,不计分) 【问题描述】 从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 12 / 2 / 2 。计算表达式结果,并输出。 …...

Redis的高可用模式
1. 什么是高可用? 高可用(High Availability, HA)是指在信息技术中确保系统、服务或应用程序在绝大多数时间内都是可操作和可访问的能力。这通常涉及以下几个关键方面: 最小化停机时间: 高可用系统的目标是减少因硬件故障、系统升…...

非功能关键知识总结(一)
文章目录 一、稳定性(一)、服务级别协议1、SLA2、OLA3、UC (二)、可用性指标(三)、突发事件等级 三、质量(一)、千行代码缺陷数量(二)、软件质量模型的发展(三)、产品质量模型 四、安全(一)、网络安全 五、灾备(一)、灾备指标(二)、灾难恢复等级(三)、容灾技术分类 一、稳定性 …...

时间序列趋势检验相关检验方法:斜率法、Cox-Stuart检验、Mann-Kendall检验
文章目录 1.斜率法1.1.原理1.2.优缺点1.3.Python代码2.Cox-Stuart检验2.1.原理2.2.优缺点2.3.Python代码3.Mann-Kendall 检验3.1.原理3.1.1.假设前提3.1.2.趋势检验3.1.3.S到Z的变换原理3.1.4.Var(s)是如何得到的3.1.5.衡量趋势的指标:倾斜度...

Redis相关知识
yum安装redis 使用以下命令:直接将redis安装到Linux服务器(Xshell)中 yum -y install redis 启动redis 使用以下命令,以后台运行方式启动redis redis-server /etc/redis.conf & 操作redis 使用以下命令启动redis客户端 redis-…...