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

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

目录标题

  • 前言
  • 一、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 所示:
在这里插入图片描述
在这里插入图片描述

总结

待补充。

相关文章:

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

目录标题前言一、Spring带给我们什么二、Spring体系结构三、Spring4.0新特性核心容器的增强泛型依赖注入Map依赖注入Lazy延迟依赖注入List注入Conditional 注解CGLIB 代理类增强其他四、Spring 子项目总结前言 汇总:《精通Spring4.x 企业应用开发实战》 一、Spring带…...

【Spring Cloud Alibaba】003-Nacos 概述与单机搭建

【Spring Cloud Alibaba】003-Nacos 概述与单机搭建 文章目录【Spring Cloud Alibaba】003-Nacos 概述与单机搭建一、Nacos 概述0、新技术学习思路推荐1、什么是 Nacos2、架构图架构图架构图信息二、Nacos 单机搭建1、下载与启动下载地址编辑 startup.cmd 文件下面对两种模式的…...

如何使用 API 工具做 Websocket 测试

在 API 测试中,对 Websocket 协议的支持呼声越来越高,今天给大家推荐一款 开源的 API 管理工具——Postcat,以及教教大家,如何利用 API 管理工具做 Websocket 测试。 在线 Demo 链接:Postcat - Open Source API Ecosys…...

90%的人都理解错了HTTP中GET与POST的区别

Get和Post是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是Get把参数包含在URL中,Post通过request body传递参数。 你可能自己写过无数个Get和Post请求,或者已经看过很多权威网站总结…...

【C++】秋招实习面经汇总篇

C面经汇总 系列综述: 目的:本系列是个人整理为了秋招和实习面试的,整理期间苛求每个知识点,平衡背诵量与深入程度。 来源:材料主要源于阿秀的笔记和《王道考研复习指导》进行的,每个知识点的修正和深入主要…...

干货分享:2023欧美市场分析与机会

1、2023年欧美市场分析美国是⼀个消费大国,正常情况下做外贸不可忽略的市场。如何找客户:专注产业链 。产业链对接,其上游是什么,那么他就是我的客户 ( 原材料-⼯⼚)南美洲是北美的经济殖民地(矿产资源农产品),非洲仍然…...

介绍Kadence Elements元素模板:按您的方式设计网站

随着 Kadence Pro 1.0.4 和 Kadence Blocks Pro 1.5.8 的发布,Kadence 团队很高兴地宣布推出最强大的新方法,帮助网站所有者使用 Kadence Elements Templates 创建动态和高度定制的 WordPress 网站。如果您曾经创建过 WordPress 网站,并且发现…...

物联网发展的重要通信技术Wi-Fi

Wi-Fi 可以适应各种场景的联网需求 Wi-Fi 在实现物联网创新方面发挥了基础性作用,提供了广泛的连接性,将各种“事物”相互连接、连接到互联网,以及连接到全球使用的 180 亿台 Wi-Fi 设备。物联网的经济潜力是无限的,Wi-Fi 为智能…...

OSS上传(Java和Js)

OSS上传(Java和Js)准备工作创建RAM用户创建角色创建权限策略给角色授予权限策略获取临时访问凭证Java普通上传OSSJava分片上传OSSJS普通上传OSSJS分片上传OSS使用RAM用户或STS方式访问 由于阿里云账号AccessKey拥有所有API访问权限,建议遵循阿…...

【虚拟机】VirtualBox Host-Only + 主机网络共享配置

文章目录创建Host-Only虚拟机配置主机配置其它工作中经常会使用到虚拟机进行各种技术的试验,之前为了省事常用桥接模式,可是我经常变换办公地点,每个办公地点的局域网网段并不一样,所以我采取了仅主机模式网络共享这种方式&#x…...

小公司“混”的3年,我认真做了5件事,真的受益终生

小公司“混”的3年,我认真做了5件事,真的受益终生 目录:导读 功能测试很重要但不值钱 自动化测试在小公司没市场,但是你得会 给自己的一些忠告 第一件事:分清阶段,制定计划 第二件事:梳理…...

Linux Crontab命令定时任务基本语法与操作教程

Linux Crontab命令定时任务基本语法与操作教程 一、Crontab查看编辑重启 1、查看crontab定时执行任务列表 crontab -l 2、编辑crontab定时执行任务 crontab -e 3、删除crontab定时任务 crontab -r 4、相关命令: sudo service crond start #启动服务 sudo …...

文档测试要测什么,如何进行测试?

文档测试要测什么,如何进行测试? 对于交付用户文档来说,以需求、用户手册、安装手册等为主,检查用户文档是否和实际的存在差别,主要从以下几个方面来考虑: 阅读者:文档面向的读者定位要清晰&…...

.net 6 引入EFCore

这里默认使用sql server数据库 DBFirst nuget引入程序集 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.Design Microsoft.EntityFrameworkCore.Tools Microsoft.Extensions.Logging.Console 执行脚本 设置DAL…...

MySQL------自定义排序

1、MySQL函数 field() 实现自定义 语法: SELECT * from table_name ORDER BY FIELD(str,str1,str2,str3,…) str: 字段名, str1,str2,str3: 自定义排序的数值 例1排序-所有值: 先姓名排序后出生日期排序 SELECT * from name_info ORDER BY FIELD(name…...

FFMPEG自学二 ⾳频编码实战

一、FFmpeg编码流程二、流程关键函数avcodec_find_encoder:根据指定的AVCodecID查找注册的编码器。 avcodec_alloc_context3:为AVCodecContext分配内存。 avcodec_open2:打开编码器。 avcodec_send_frame:将AVFrame⾮压缩数据给…...

​一致魔芋在北交所上市:市值突破11亿元,吴平夫妇为实控人​

2月21日,湖北一致魔芋生物科技股份有限公司(下称“一致魔芋”,BJ:839273)在北京证券交易所上市。本次上市,一致魔芋的发行价为11.38元/股,发行1350万股,募资总额约为1.54亿元。 本次发行后&…...

进程或线程终止是否会释放锁

线程锁的必要性比如一个多线程抢票程序,tickets作为临界资源,所有的线程都要对它进行判断ticket是否大于0,以及ticket–的操作。用ticket–操作举例,虽然他看起来是一行C语言的代码,但是实际上它的底层汇编经历了三个阶…...

mysql复制表提示某些为null字段无效

sql_mode‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’ explicit_defaults_for_timestamp ON 1、方式1、 首先用下面的命令看下sql_mode show variables like ‘sql_mode’; 如果查询的结果如下&#…...

【数据库】redis 配置文件与发布订阅

目录 配置文件 一,Units 二, INCLUDE 三,NETWORK 1, bind 2, tcp-backlog 3,timeout 4, tcp-keepalive 四,GENERAL 1,daemonize 2, pidfile 3&…...

基于西门子S7-1200的换热站PLC与换热器程序,V16及以上博图WinCC画面组态,手自动...

换热站plc程序换热器程序 (22)采用西门子S7-1200博图WinCC画面组态,博图V16及以上版本都可以仿真运行,无需硬件。 系统带有手动/自动模式,运行数据动态实时显示,带温度实时曲线显示,…...

蹲实验室折腾了两天FPGA终于把BISS-C协议编码器的坑填了。这次实现的Verilog方案有点意思,直接上硬货说说实现要点

雷尼绍BISS-C协议编码器verilog源码,支持18/26/32/36bit配置(也可以方便改成其他非标配置),支持最高10M时钟频率,由于是用FPGA纯verilog编写, 1)方便移植部署 2)可以支持多路编码器同时读取 3)成功在板卡跑…...

终极Vorpal错误恢复指南:7个关键策略构建健壮CLI应用

终极Vorpal错误恢复指南:7个关键策略构建健壮CLI应用 【免费下载链接】vorpal Nodes framework for interactive CLIs 项目地址: https://gitcode.com/gh_mirrors/vo/vorpal Vorpal是Node.js生态系统中构建交互式命令行应用的首选框架,提供了强大…...

5个Adobe-GenP实用技巧:从安装到完美运行Photoshop

5个Adobe-GenP实用技巧:从安装到完美运行Photoshop 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP是一款强大的Adobe Creative Cloud通用补丁…...

5分钟掌握MPC Video Renderer:解锁专业级HDR视频渲染的完整解决方案

5分钟掌握MPC Video Renderer:解锁专业级HDR视频渲染的完整解决方案 【免费下载链接】VideoRenderer RTX HDR modded into MPC-VideoRenderer. 项目地址: https://gitcode.com/gh_mirrors/vid/VideoRenderer MPC Video Renderer是一款功能强大的开源DirectSh…...

测试报告编写核心技巧:让结果一目了然的专业模板指南

测试报告的价值重构在软件质量保障体系中,测试报告不仅是项目交付的最终凭证,更是驱动质量改进的战略工具。优秀的测试报告需实现三重价值:决策支持:为上线评审提供数据化依据问题追踪:形成缺陷治理的闭环链路效能度量…...

Claudia:提升开发效率的智能代码助手桌面应用

Claudia:提升开发效率的智能代码助手桌面应用 【免费下载链接】opcode A powerful GUI app and Toolkit for Claude Code - Create custom agents, manage interactive Claude Code sessions, run secure background agents, and more. 项目地址: https://gitcode…...

Fastfetch:超越 Neofetch 的系统信息获取新利器

【导语:Fastfetch 作为一款类似 neofetch 的工具,以 C 语言编写,注重性能与可定制性,支持多平台。它在速度、功能、准确性等方面超越竞品,为用户带来全新系统信息获取体验。】多平台适配的系统信息工具Fastfetch 是一款…...

卡证检测矫正模型开发环境搭建:PyCharm/IDEA项目配置全攻略

卡证检测矫正模型开发环境搭建:PyCharm/IDEA项目配置全攻略 你是不是刚拿到一个卡证检测矫正模型的项目,看着一堆代码和配置文件有点无从下手?特别是想用PyCharm或者IDEA这样的专业工具来开发调试,却不知道从哪一步开始配置环境&…...

解锁高效无水印备份:抖音视频批量下载的完整指南

解锁高效无水印备份:抖音视频批量下载的完整指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 直面内容管理痛点:三个真实用户的困境 场景一:学习资源的系统性流失 教…...