当前位置: 首页 > news >正文

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 (一站式 )轻量级开源框架

  • SpringIOC( 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)、InstrumentationMessagingTest。
    如下图所示。

    在这里插入图片描述

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框架的 基本组成部分,包括 IOCDI功能。

ps :
SpringIOC( Inversion of Control,控制反转)和 AOP ( Aspect Oriented Programming,面向切面编程)为 内核

Context上下文模块 (★★★) : ApplicationContext

Context上下文模块 : 建立在CoreBeans模块的基础之上,它是访问定义配置任何对象媒介。其中 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 (数据访问/集成)

数据访问/集成层包括JDBCORMOXMJMSTransactions 模块

JDBC模块 (★★★)

JDBC模块:提供了一个JDBC的抽象层,大幅度地减少了在开发过程中对数据库操作的编码

ORM模块

ORM模块:对流行的对象关系映射API, 包括JPAJDOHibernate提供了集成层

OXM模块

OXM模块:提供了一个支持对象/ XML映射抽象层实现,如JAXBCastorXMLBeansJiBXXStream

JMS模块

JMS模块 : 指Java消息传递服务,包含使用和产生信息的特性,自4.1版本后支持与Spring-message模块的集成

Transactions事务模块 (★★★)

Transactions事务模块 : 支持对实现特殊接口以及所有POJO类的编程和声明式的 事务管理

3.3 Web

SpringWeb层 包括WebSocketServletWebPortlet模块。

WebSocket模块

WebSocket模块: Spring 4.0以后新增的模块,它提供了WebSocketSockJS的实现,以及对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的 其他模块 还有AOPAspectsInstrumentationMessaging以及Test模块

AOP模块 (★★★)

AOP模块:提供了 面向切面编程 实现,允许定义方法拦截器切入点,将代码按照功能进行分离以降低耦合性

ps :
SpringIOC( 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容器中的BeanSpring获得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 容器

  • ApplicationContextBeanFactory子接口,也被称为 应用上下文,是另一种常用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容器中的BeanSpring获得Bean的实例有以下 两种方法

  • Object.getBean( String name):
    Object getBean(String name) : 根据容器中Beanidname 来获取指定的Bean,获取之后需要进行强制类型转
  • T getBean(Class requiredType): 根据 类的类型获取Bean的实例。由于此方法为泛型方法,因此在获取Bean之后不需要进行强制类型转换

相关文章:

Spring | Spring的基本应用

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

项目开发维护技术文档(梳理总结中)

目录 项目名称——惠誉灵境 一、项目背景 二、架构设计 1.技术栈 2.架构图 3.代码结构 三、模块划分 1.平台首页 2.登录模块 3.系统模块 &#xff08;1&#xff09;系统首页 &#xff08;2&#xff09;组织架构 &#xff08;3&#xff09;权限管控 ①角色管理 &#xff08;4&am…...

【接口测试】Apifox实用技巧干货分享

前言 不知道有多少人和我有着这样相似的经历&#xff1a;从写程序只要不报错就不测试&#x1f60a;&#xff0c;到写了程序若是有bug就debug甚至写单元测试&#xff0c;然后到了真实开发场景&#xff0c;大哥和你说&#xff0c;你负责的功能模块的所有接口写完要测试一遍无误在…...

车联网架构设计(一)_消息平台的搭建

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

(蓝桥杯)1125 第 4 场算法双周赛题解+AC代码(c++/java)

题目一&#xff1a;验题人的生日【算法赛】 验题人的生日【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路&#xff1a; 1.又是偶数&#xff0c;又是质数&#xff0c;那么只有2喽 AC_Code:C #include <iostream> using namespace std; int main() {cout<<2;return 0; …...

也可Adobe Animate

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

【面试HOT200】回溯篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于【CodeTopHot300】进行的&#xff0c;每个知识点的修正和深入主要参…...

JVM——内存溢出和内存泄漏

目录 1. 内存溢出和内存泄漏内存泄漏的常见场景解决内存溢出的思路1.发现问题 – Top命令2.发现问题 – VisualVM3.发现问题 – Arthas4.发现问题 – Prometheus Grafana5.发现问题 – 堆内存状况的对比![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/058d113715b…...

《凤凰项目》读书笔记

文章目录 一、书名和作者二、书籍概览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…...

数据结构-基数排序

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

基于ASP.NET MVC技术的图书管理系统的设计与实现

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

C++17中的结构化绑定

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

Mover Creator 用户界面

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

『Nginx安全访问控制』利用Nginx实现账号密码认证登录的最佳实践

&#x1f4e3;读完这篇文章里你能收获到 如何创建用户账号和密码文件&#xff0c;并生成加密密码配置Nginx的认证模块&#xff0c;实现基于账号密码的登录验证 文章目录 一、创建账号密码文件1. 安装htpasswd工具1.1 CentOS1.2 Ubuntu 二、配置Nginx三、重启Nginx 在Web应用程…...

MongoDB导入导出命令

&#xff08;1&#xff09;mongoexport命令 例如&#xff1a; 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博客 【软件工程】软件工程期末试卷习题课讲解&#xff01;&#xff01;_哔哩哔哩_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语言中&#xff0c;有一种特殊的数据类型&#xff0c;即字符串类型。C 并没有专门定义一个字符串类型&#xff0c;这对我们使用字符串造成了一定的麻烦。但是&#xff0c;C标准库<string.h> 中定义了各种字符串函数&#xff0c;这对于我们来说是一件值得庆幸的事情。…...

从实验室到生活场景:近红外脑成像(fNIRS)如何重塑认知研究边界

1. 从实验室到客厅&#xff1a;fNIRS如何打破认知研究的围墙 十年前我第一次接触近红外脑成像设备时&#xff0c;它还是个需要固定在三脚架上的"庞然大物"&#xff0c;被试必须像雕塑般保持静止。如今看着学生戴着LUMO设备在操场自由活动时采集数据&#xff0c;这种技…...

如何高效管理游戏资源:GodotPckTool 完全指南与5个实战技巧

如何高效管理游戏资源&#xff1a;GodotPckTool 完全指南与5个实战技巧 【免费下载链接】GodotPckTool Standalone tool for extracting and creating Godot .pck files 项目地址: https://gitcode.com/gh_mirrors/go/GodotPckTool GodotPckTool 是一个独立的命令行工具…...

Unity 6升级后频繁闪退?别慌,这8个D3D11崩溃的修复方法亲测有效

Unity 6升级后D3D11崩溃全攻略&#xff1a;从快速修复到深度优化 刚升级到Unity 6的开发者们&#xff0c;是否正被突如其来的编辑器崩溃搞得焦头烂额&#xff1f;那些令人抓狂的"D3D11设备丢失"弹窗&#xff0c;不仅打断工作流&#xff0c;还可能让宝贵项目进度陷入停…...

CogVideoX-2b完整功能测评:一键部署+本地渲染+隐私安全全解析

CogVideoX-2b完整功能测评&#xff1a;一键部署本地渲染隐私安全全解析 1. 为什么选择本地化视频生成工具 在内容创作领域&#xff0c;视频制作一直是门槛较高的技能。传统视频制作需要专业的剪辑软件、大量的素材积累以及复杂的时间线操作。而云端视频生成服务虽然降低了技术…...

事务隔离级别全景解析:从脏读到幻读的深度剖析

事务隔离级别全景解析&#xff1a;从脏读到幻读的深度剖析在数据库并发控制的宏大叙事中&#xff0c;事务隔离级别扮演着“交通规则”的角色。当多个用户同时访问和修改数据时&#xff0c;如果没有合理的隔离机制&#xff0c;数据的一致性和完整性将面临巨大风险。本文将深入探…...

FPGA新手避雷指南:你的第一个呼吸灯项目可能卡在这几个Vivado仿真和引脚分配问题上

FPGA新手避雷指南&#xff1a;从仿真到引脚分配的完整呼吸灯实战 第一次在FPGA上实现呼吸灯效果&#xff0c;本该是充满成就感的时刻。但当你按照教程一步步操作&#xff0c;点击"Generate Bitstream"后&#xff0c;板子上的LED却毫无反应——这种挫败感我太熟悉了。…...

云容笔谈在自媒体内容生产中的提效实践:日更国风配图效率提升300%

云容笔谈在自媒体内容生产中的提效实践&#xff1a;日更国风配图效率提升300% 1. 自媒体内容创作的痛点与挑战 作为自媒体创作者&#xff0c;每天最头疼的就是配图问题。特别是做国风内容的账号&#xff0c;既要保持东方美学韵味&#xff0c;又要保证日更频率&#xff0c;传统…...

Obsidian图像转换:提升笔记效率的格式优化解决方案

Obsidian图像转换&#xff1a;提升笔记效率的格式优化解决方案 【免费下载链接】obsidian-image-converter ⚡️ Convert, compress, resize, annotate, markup, draw, crop, rotate, flip, align images directly in Obsidian. Drag-resize, rename with variables, batch pro…...

Phi-4-reasoning-vision-15B部署教程:开源大模型镜像适配国产GPU方案

Phi-4-reasoning-vision-15B部署教程&#xff1a;开源大模型镜像适配国产GPU方案 1. 模型介绍 Phi-4-reasoning-vision-15B是微软推出的视觉多模态推理模型&#xff0c;具备强大的图像理解和分析能力。这个15B参数规模的模型特别擅长处理需要结合视觉和语言理解的复杂任务。 …...

Zabbix 6.0部署避坑指南:为什么你的Ubuntu安装总卡在数据库初始化这一步?

Zabbix 6.0部署避坑指南&#xff1a;为什么你的Ubuntu安装总卡在数据库初始化这一步&#xff1f; 如果你正在Ubuntu上部署Zabbix 6.0&#xff0c;却反复在数据库初始化这一步失败&#xff0c;这篇文章就是为你准备的。不同于常规的安装教程&#xff0c;我们将聚焦于那些看似简…...