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之后不需要进行强制类型转换

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mongoose 开源库--http协议 header 报头解析

一、http 协议 header 报头相关 API 获取http header的值 struct mg_str *mg_http_get_header(struct mg_http_message *hm, const char *name);参数&#xff1a; hm - HTTP message to look for header name - Header name返回值&#xff1a; HTTP header value or NULL i…

Docker下安装MySQL

如果在Docker下直接拉取MySQL并运行镜像&#xff0c;由于没有指定字符编码集&#xff0c;可能会存在插入中文出现乱码的情况&#xff0c;并且当容器删除后&#xff0c;容器里面存在的数据会丢失&#xff0c;所以在运行容器时应该使用数据卷进行挂载&#xff0c;按照如下步骤操作…

智慧城市包括哪些内容?有哪些智慧城市物联网方案?

数字城市、智慧城市的发展&#xff0c;离不开对公共基础设施的数字化、智慧化改造升级。通过融合边缘计算、5G、物联网、数字孪生、人工智能等新一代信息技术&#xff0c;助力传统公共基础设施提升增强全流程数据能力、计算能力、服务能力&#xff0c;从而不断丰富公共基础设施…

Kotlin:内置函数let、also、with、run、apply

前言 在Kotlin中&#xff0c;有一些用于扩展 & 方便开发者编码的内置函数&#xff0c;能大大提高开发者的开发效率。今天&#xff0c;我将主要讲解的是&#xff1a; let函数also函数with函数run函数apply函数 基础知识&#xff1a;接口回调中Lambda使用 在Kotlin中可使用…

IM通信技术快速入门:短轮询、长轮询、SSE、WebSocket

文章目录 前言即时通讯常用技术 短轮询&#xff08;Short Polling&#xff09;实现原理优点缺点 长轮询(Long Polling)实现原理改进点基于iframe的长轮询实现原理总结 Server-Sent Events&#xff08;SSE&#xff09;实现原理浏览器对 SSE 的支持情况SSE vs WebSocket总结 WebS…

Fisher信息理论与应用

一、概念介绍 Fisher信息量&#xff0c;是一次观测值所能提供的关于未知参数θ的信息量期望值的一种度量。 Fisher信息矩阵&#xff0c;是用利用最大似然函数估计来计算方差矩阵&#xff0c;表示随机变量的一个样本所能提供的关于状态参数在某种意义下的平均信息量。 Fisher…

Python---练习:列表赋值---追加append尾部追加元素,追加的是一个元素整体

相关链接&#xff1a; Python--列表及其应用场景---增、删、改、查。-CSDN博客 代码&#xff1a; # 列表赋值 a [1, 2, 3] a.append([3, 4]) # append尾部追加元素&#xff0c;追加的是一个元素整体&#xff1a;[3, 4] print(a)

Java实现简单飞翔小鸟游戏

一、创建新项目 首先创建一个新的项目&#xff0c;并命名为飞翔的鸟。 其次在飞翔的鸟项目下创建一个名为images的文件夹用来存放游戏相关图片。 用到的图片如下&#xff1a;0~7&#xff1a; bg&#xff1a; column&#xff1a; gameover&#xff1a; ground&#xff1a; st…

Java数据结构 之 包装类简单认识泛类

生命不息&#xff0c;奋斗不止 目录 1. 什么是包装类&#xff1f; 1.1 装箱和拆箱 1.2 自动装箱和自动拆箱 2. 什么是泛型 3. 引出泛型 3.1 语法 4 泛型类的使用 4.1 语法 4.2 示例 4.3 类型推导(Type Inference) 5. 裸类型(Raw Type) &#xff08;了解&#xff09…

使用docker切换任意版本cuda使用GPU

1.现存问题 在主机上运行很多下载来的机器学习代码时&#xff0c;这些大都运行在不同版本的tensorflow-gpu或者pytorch等的包下的。但是&#xff0c;运行代码的过程中&#xff0c;存在匹配的问题&#xff1a; 1.不同的版本的tensorflow-gpu或pytorch对cuda版本的适配也不一样…

优化邮件群发效果的策略与方法

怎样优化邮件群发效果&#xff1f;这是许多企业在进行邮件营销时常常被问到的问题。邮件营销是一种高效且经济实惠的市场推广方式&#xff0c;但如何使邮件真正引起接收者的兴趣并产生预期的效果并不容易。好的营销效果可以带来高回报、高收益率&#xff0c;但是怎么提升群发效…

专升本期间部分C语言程序整理

说明 这些程序是我在专升本期间在CSDN上上传的作业、练习等&#xff0c;仅为学习备考的一小部分程序&#xff0c;整理成一篇文章&#xff0c;方便专升本的学弟学妹参考。 时间&#xff1a;2021年~2022年专升本期间 字符串题 输入字符串提取 数字字符 并 求和 &#xff08;4处…

【最通用版FPGA 实现 SPI 驱动】

最近研究了一下SPI协议的FPGA实现&#xff0c;发现网上很多大佬分享的方法都是针对某一特定的flash芯片或者某一传感器芯片来设计电路结构的。所以想根据SPI&#xff08;Serial Peripheral Interface&#xff09;的基本通讯协议实现一个通用版的SPI Master驱动。SPI在嵌入式领域…

每天一点python——day84

#每天一点Python——84 #异常处理机制try—except—else #异常处理机制try—except—else如果try块中没有抛出异常&#xff0c;则执行else块&#xff0c;如果try中抛出异常&#xff0c;则执行except块#示例&#xff1a; try:a int(input(请输入第一个整数&#xff1a;))b in…

controller能接收到数据有数据但是前端无法显示数据

又是制作系统时遇到的问题。只是想做个查询商品的页面&#xff0c;结果弄了一天&#xff0c;在网上各种查问题&#xff0c;各种解决办法用在我的代码上&#xff0c;换了无数种关键词搜索终于找到了一条成功解决了问题。 问题描述&#xff1a; 事情是这样的&#xff1a;我要写一…

无代码集成航天信息:优化电商平台用户运营,提高CRM和广告推广的效能

无代码开发的集成优势 在数字化竞争愈发激烈的商业市场中&#xff0c;企业对于提高效率和优化用户运营的需求不断增长。无代码开发的集成解决方案&#xff0c;如航天信息电子发票&#xff0c;为企业提供了无需深入编程知识即可快速实现的系统对接能力。这种集成方式简化了技术…

没了解死锁怎么能行?进来看看,一文带你拿下死锁产生的原因、死锁的解决方案。

&#x1f308;&#x1f308;&#x1f308;今天给大家分享的是死锁产生的原因&#xff0c;以及如何解决死锁问题。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起…

Hdoop学习笔记(HDP)-Part.09 安装OpenLDAP

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

[蓝桥杯 2019 省 B] 特别数的和-C语言的解法

小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff08;不包括前导 0&#xff09;&#xff0c;在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40&#xff0c;共 28 个&#xff0c;他们的和是 574。 请问&#xff0c;在 1 到 n 中&#xff0c;所有这样的数的和是多少&…

JavaScript编程基础 – For循环

JavaScript编程基础 – For循环 JavaScript Programming Essentials – For Loop By JacksonML 循环可以多次执行代码块&#xff0c;而不用反复重写相同的语句。这无疑对提升代码质量、减少错误大有脾益。本文将简要介绍for循环的几种案例&#xff0c;希望对读者有所帮助。 …