《精通Spring4.x 企业应用开发实战》第1章 Spring概述

news2025/7/9 4:55:30

目录标题

  • 前言
  • 一、Spring带给我们什么
  • 二、Spring体系结构
  • 三、Spring4.0新特性
    • 核心容器的增强
      • 泛型依赖注入
      • Map依赖注入
      • @Lazy延迟依赖注入
      • List注入
      • @Conditional 注解
      • CGLIB 代理类增强
    • 其他
  • 四、Spring 子项目
  • 总结

前言

汇总:《精通Spring4.x 企业应用开发实战》

一、Spring带给我们什么

  1. 方便解耦,简化开发。通过 Spring 提供的 IoC 容器,用户可以将对象之间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。有了 Spring, 用户不必再为单实例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用。
  2. AOP 编程的支持。通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,很多不容易用传统OOP实现的功能可以通过 AOP 轻松应对。
  3. 声明式事务的支持。在 Spring 中,用户可以从单调烦闷的事务管理代码中解脱出来,通过声明的方式灵活地进行事务管理,提高开发效率和质量。
  4. 方便程序的测试。可以用非容器依赖的编程方式进行几乎所有的测试工作。在Spring 里,测试不再是昂贵的操作,而是随手可做的事情。
  5. 方便集成各种优秀框架。Spring 不排斥各种优秀的开源框架,相反,Spring 可以降低各种框架的使用难度。Spring 提供了对各种优秀框架(如 Struts、Hibernate、 Hessian、 Quartz 等)的直接支持。
  6. 降低 Java EE API 的使用难度。Spring 对很多难用的 Java EE API(如JDBC、JavaMail、远程调用等)提供了一个薄层封装,通过 Spring 的简易封装,这些Java EE API 的使用难度大大降低。
  7. Java 源码是经典的学习范例Spring 的源码设计精妙、结构清晰、匠心独运,处处体现着大师对 Java 设计模式的灵活运用及对 Java 技术的高深造诣。Spring框架源码无疑是 Java 技术的最佳实践范例。如果想在短时间内迅速提高自己的 Java 技术水平和应用开发水平,学习和研究 Spring 源码将会收到意想不到的效果

二、Spring体系结构

Spring 核心框架由 4000 多个类组成,整个框架按其所属功能可以划分为5个主要模块,如图1-1所示:
在这里插入图片描述
从整体来看,这5个主要模块几乎为企业应用提供了所需的一切,从持久层、业务层到展现层都拥有相应的支持。就像吕布的赤免马和方天画戟、秦琼的黄骠马和熟铜锏,IoC 和 AOP 是 Spring 所依赖的根本。在此基础上,Spring 整合了各种企业应用开源框架和许多优秀的第三方类库,成为 Java 企业应用 full-stack 的开发框架。

1、 loC
Spring 核心模块实现了 loC 的功能,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由 IoC 容器负责依赖类之间的创建、拼接、管理、获取等工作BeanFactory 接口是 Spring 框架的核心接口,它实现了容器许多核心的功能。

Context 模块构建于核心模块之上,扩展了 BeanFactory 的功能,添加了 il18n 国际化、Bean 生命周期控制、框架事件体系、资源加载透明化等多项功能。此外,该模块还提供了许多企业级服务的支持,如邮件服务、任务调度、JNDI 获取、EJB 集成、远程访问等。ApplicationContext 是 Context 模块的核心接口。

表达式语言模块是统一表达式语言(Unified EL) 的一个扩展,该表达式语言用于查询和管理运行期的对象,支持设置/获取对象属性,调用对象方法,操作数组、集合等。此外,该模块还提供了逻辑表达式运算、变量定义等功能,可以方便地通过表达式串和Spring IoC 容器进行交互。

2、 AOP
AOP 是继 O0P之后,对编程设计思想影响极大的技术之一。AOP 是进行横切逻辑编程的思想,它开拓了考虑问题的思路。在 AOP 模块里,Spring提供了满足 AOP Alliance规范的实现,还整合了 AspectJ 这种 AOP 语言级的框架。在 Spring 里实现 AOP 编程有众多选择。Java 5.0 引入 java.lang.instrument,允许在JVM 启动时启用一个代理类,通过该代理类在运行期修改类的字节码,改变一个类的功能,从而实现 AOP 的功能。

3、数据访问和集成
任何应用程序的核心问题是对数据的访问和操作。数据有多种表现形式,如数据表、XML、消息等,而每种数据形式又拥有不同的数据访问技术(如数据表的访问既可以直接通过 JDBC,也可以通过 Hibernate 或 MyBatis)。

首先,Spring 站在 DAO 的抽象层面,建立了一套面向 DAO层的统一的异常体系,同时将各种访问数据的检查型异常转换为非检查型异常,为整合各种持久层框架提供基础。其次,Spring 通过模板化技术对各种数据访问技术进行了薄层封裝,将模式化的代码隐藏起来,使数据访问的程序得到大幅简化。这样,Spring 就建立起了和数据形式及访问技术无关的统一的 DAO 层,借助 AOP 技术,Spring提供了声明式事务的功能。

4、 Web 及远程操作
该模块建立在 Application Context模块之上,提供了 Web 应用的各种工具类,如通过 Listener 或 Servlet 初始化 Spring 容器,将 Spring 容器注册到 Web 容器中。该模块还提供了多项面向 Web 的功能,如透明化文件上传、Velocity、FreeMarker、XSLT 的支持。此外,Spring 可以整合 Struts、 WebWork 等 MVC框架。

5、Web 及远程访问
Spring 自己提供了一个完整的类似于 Struts 的 MVC框架,称为 Spring MvC, 据说Spring 之所以也提供了一个 MVC 框架,是因为 Rod Johnson 想证明实现 MVC 其实是一项简单的工作。当然,如果你不希望使用 Spring MVC,那么 Spring 对 Struts、 Web Work等MVC 框架的整合,一定也可以给你带来方便。相对于 Servlet 的 MVC, Spring 在简化 Portlet 的开发上也做了很多工作,开发者可以从中受益。

6、WebSocket
WebSocket 提供了一个在 Web 应用中高效、双向的通信,需要考虑到客户端(浏览器)和服务器之间的高频和低时延消息交换。一般的应用场景有在线交易、游戏、协作、数据可视化等。此外,Spring 在远程访问及 Web Service 上提供了对很多著名框架的整合。由于Spring 框架的扩展性,特别是随着 Spring 框架影响性的扩大,越来越多的框架主动支持Spring 框架,使得 Spring 框架应用的涵盖面越来越宽广。

三、Spring4.0新特性

核心容器的增强

Spring 4.0 对核心容器进行了增强:

  1. 支持泛型依赖注入;
  2. 对 GgLib 类代理不再要求必须有空参构造器(这个特性带来很大便利);
  3. 在基于 Java 的配置里添加了 @Description;
  4. 提供@Conditional 注解来实现 Bean 的条件过滤;
  5. 提供@Lazy 注解解决 Bean延时依赖注入;
  6. 支持 Bean 被注入 List或者 Array 时可以通过@Order 注解或基于 Ordered 接口进行排序。
  7. 如果使用 Spring 的注解支持,则可以使用自定义注解来组合多个注解,方便对外公开特定的属性。

泛型依赖注入

Spring 4.0可以为子类的成员变量注入泛型类型:
在这里插入图片描述

Map依赖注入

在这里插入图片描述
上述写法将 BaseService 类型注入map 中。其中,k名字;value 是所有实现了 BaseService 的 Bean。

@Lazy延迟依赖注入

在这里插入图片描述

List注入

在这里插入图片描述
在这里插入图片描述

@Conditional 注解

@Conditional 类似于@Profile,一般用于在多个环境(开发环境、测试环境、正式机环境)中进行配置切换,即通过某个配置来开启某个环境。@Conditional 注解的优点是允许自己定义规则。可以指定在如@Component、@Bean、 @Configuration 等注解的类上,以决定是否创建 Bean 等

CGLIB 代理类增强

在 Spring 4.0 中,基于 CGLIB的代理类不再要求类必须有空参构造器,这是一个很好的特性。使用构造器注入有很多好处,比如,可以确保只在创建 Bean 时注入依赖,以保证 Bean 不可更改;又如,如果对UserService 类进行事务增强,此时要求 UserService 类必须有空参构造器,就会造成很多不便。

其他

Spring4.0其他特性:

  1. Spring Web MVC的增强:新增了@RestController注解;
  2. 支持了WebSocket;
  3. 全面支持Java8;

四、Spring 子项目

打开 Spring 官方网站 http://spring.io/projects,可以看到 Spring 众多的子项目,它们构建起一个丰富的企业级应用解决方案的生态系统

在这个生态系统中,除 Spring 框架本身外,还有很多值得关注的子项目。从配置到安全,从普通 Web 应用到大数据,用户在构建应用基础设施的时候,总能从 Spring 子项目中找到一个适合自己的子项目。对Spring 应用开发者来说,了解这些子项目,可以更好地使用 Spring;也可以通过阅读这些子项目的源代码,更深入地了解 Spring 的设计架构和实现原理。

下面以表格形式对Spring 的各个子项目进行简要介绍,如表1-1 所示:
在这里插入图片描述
在这里插入图片描述

总结

待补充。

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

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

相关文章

L2-010 排座位

布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。 输入格式&#xff1…

【LeetCode】剑指 Offer 10- II. 青蛙跳台阶问题 p77 -- Java Version

题目链接:https://leetcode.cn/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/ 1. 题目介绍(10- II. 青蛙跳台阶问题) 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取…

采购评标管理过程是怎样的?有哪些评标标准?

采购活动的评标是检查和比较投标的有组织的过程,以选择最佳报价,努力获得实现企业目标所需的货物、工程和服务。 评标是由一个被称为评标小组的机构负责。这个小组如何称呼,取决于企业的情况。同义词有报价审查小组、投标审查委员会或投标审…

在ONLYOFFICE中借助ChatGPT一键创建招聘启事的内容

大家好,相信和多人都在生活中或工作中看到过招聘启示,或多或少都会有些了解。今天教大家在ONLYOFFICE中怎样通过chetGPT创建一份满意的招聘启示,下面是我用chatgpt制作的一份招聘信息,请大家看一下。 ONLYOFFICE ONLYOFFICE文档是…

从0到1实现单机记账APP原理与细节uniApp内含源码 (一)

单机记账APP演示及源码 具体演示如下面视频所示。免费下载地址:点击进入 预览APP(内含开屏广告)下载地址:http://8.142.10.182:8888/down/aWHWeGaEQE2W.apk 服务器买的便宜,带宽很小所以下载速度慢,主要还…

mathtype7.0最新版安装下载及使用教程

MathType是一款专业的数学公式编辑器,理科生专用的必备工具,可应用于教育教学、科研机构、工程学、论文写作、期刊排版、编辑理科试卷等领域。2014年11月,Design Science将MathType升级到MathType 6.9版本。在苏州苏杰思网络有限公司与Design…

APP任务模块功能借助php-resque实现业务解耦

先上设计图 说明:任务模块分一次性任务和每日任务,可能还包括男女用户任务区分 处理步骤: 一、同步任务数据库 1.1、任务列表数据库 1.2、完成任务数据库 二、搭建即时消息队列 一、composer require resque/php-resque二、因为服务器red…

数据结构:栈和队列(Leetcode20. 有效的括号+225. 用队列实现栈+232. 用栈实现队列)

目录 一.数据结构--栈 1.栈的基本介绍 2.栈的实现 二.数据结构--队列 1.队列的基本介绍 2.队列的实现 三.栈的运用(Leetcode20. 有效的括号225) 1.问题描述 2.问题分析 题解代码: 四.用两个队列实现栈(225. 用队列实现栈 - 力扣(Leetcode&a…

Talk | 清华大学交叉信息研究院助理教授杜韬:利用计算方法探究流固耦合

本期为TechBeat人工智能社区第474期线上Talk! 北京时间2月15日(周三)20:00,清华大学交叉信息研究院助理教授——杜韬的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “利用计算方法探究流固耦合”,届时将介绍流固…

Windows10使用-处理IE自动跳转至Edge

文章目录 前言一、调整Edge二、调整Internet选项三、搜索栏的恢复总结前言 微软官方宣布,自2023年2月14日永久停止支持Internet Explorer 11浏览器。后期点击IE 图标将会自动跳转到Edge界面。对于一些网站,可能需要使用IE模式才能正常使用,这时候就需要做相应的调整,才能够…

做外贸怎么找客户

现在国内贸易内卷非常严重,很多商家都转向海外市场了,总结而言,目前所有做外贸的人,核心的点就是要找到重点意向客户,今天就和大家分享一下目前市面上外贸找客户的几种方法。主动出击式开发外贸客户1、参加展会找外贸客…

使用拦截器实现登录状态检测(以及在注册拦截器类时要使用ioc中的拦截器类)

拦截器 preHandler(HttpServletRequest request, HttpServletResponse response, Object handler) 方法在请求处理之前被调用。该方法在 Interceptor 类中最先执行,用来进行一些前置初始化操作或是对当前请求做预处理,也可以进行一些判断来决定请求是否…

C++类和对象-继承多态

继承 继承是面向对象三大特性之一 定义类时,下级别的成员除了拥有上一级的共性,还有自己的特性,就可以考虑使用继承的技术,减少代码的重复 继承的基本语法 语法:class 子类 : 继承方式 父类 子类也被成为派生类父类…

FreeRTOS队列

队列简介队列是一种任务到任务,任务到中断,中断到任务数据交流得一种机制。在队列中可以存储数量有限,大小固定得多个数据,队列中的每一个数据叫做队列项目,队列能够存储队列项目的最大数量称为队列的长度,…

生活中常见标识

一维码 一维条码即指条码条和空的排列规则,常用的一维码的码制包括:EAN码、39码、交叉25码、UPC码、128码、93码,ISBN码,及Codabar(库德巴码)等。 常见场景: - 快销品- 常用五金- 通讯设备其中蕴含的信息就是条码的****一串数字 二维码 常见场景

性能测试中,我遇到的8个常见问题总结

性能压测中我们需要明白以下几点: 1、好的开始是成功的一半,前期的准备非常重要; 2、过程中,关注每个细节,多个维度监控; 3、在调优中多积累经验; 4、对结果负责,测试报告要清晰…

Redis实战案例

文章目录1、SpringBoot整合Redis1.1、新建项目1.2、接口编写1.3、集成Redis1.3、测试1.4、序列化问题2、Redis实现分布式缓存2.1、背景介绍2.2、代码编写2.3、缓存改造2.4、小结3、RedisAOP自定义注解,优雅实现分布式缓存3.1、自定义注解3.2、AOP切面类3.3、测试3.4…

跳跃游戏II-力扣45-java 动态规划

一、题目描述给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处:0 < j < nums[i] i j < n返回到达 nums[n - …

手撸一个Table组件(Table组件不过如此)

一、前言 手写Table组件这个文章我一直都想写&#xff0c;今天终于得空来写它了。小编认为Table组件是组件库里"较为复杂"的一个组件&#xff0c;因为它的扩展性非常强&#xff0c;并且它的基础样式如何去写都非常考究&#xff0c;那么今天我就带大家来实现一个基础…

SpringBoot整合Spring Security过滤器链加载执行流程源码分析

文章目录1.引言2.Spring Security过滤器链加载1.2.注册名为 springSecurityFilterChain的过滤器2、查看 DelegatingFilterProxy类3.查看 FilterChainProxy类3.1 查看 doFilterInternal方法。3.2 查看 getFilters方法。4 查看 SecurityFilterChain接口5 查看 SpringBootWebSecur…