《精通Spring4.x 企业应用开发实战》第1章 Spring概述
目录标题
- 前言
- 一、Spring带给我们什么
- 二、Spring体系结构
- 三、Spring4.0新特性
- 核心容器的增强
- 泛型依赖注入
- Map依赖注入
- @Lazy延迟依赖注入
- List注入
- @Conditional 注解
- CGLIB 代理类增强
- 其他
- 四、Spring 子项目
- 总结
前言
汇总:《精通Spring4.x 企业应用开发实战》
一、Spring带给我们什么
- 方便解耦,简化开发。通过 Spring 提供的
IoC 容器
,用户可以将对象之间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。有了 Spring, 用户不必再为单实例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用。 AOP 编程
的支持。通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,很多不容易用传统OOP实现的功能可以通过 AOP 轻松应对。声明式事务
的支持。在 Spring 中,用户可以从单调烦闷的事务管理代码中解脱出来,通过声明的方式灵活地进行事务管理,提高开发效率和质量。- 方便程序的测试。可以用非容器依赖的编程方式进行几乎所有的测试工作。在Spring 里,测试不再是昂贵的操作,而是随手可做的事情。
- 方便集成各种优秀框架。Spring 不排斥各种优秀的开源框架,相反,Spring 可以降低各种框架的使用难度。Spring 提供了对各种优秀框架(如 Struts、Hibernate、 Hessian、 Quartz 等)的直接支持。
- 降低 Java EE API 的使用难度。Spring 对很多难用的 Java EE API(如JDBC、JavaMail、远程调用等)提供了一个薄层封装,通过 Spring 的简易封装,这些Java EE API 的使用难度大大降低。
- 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 对核心容器进行了增强:
- 支持泛型依赖注入;
- 对 GgLib 类代理不再要求必须有空参构造器(这个特性带来很大便利);
- 在基于 Java 的配置里添加了 @Description;
- 提供@Conditional 注解来实现 Bean 的条件过滤;
- 提供@Lazy 注解解决 Bean延时依赖注入;
- 支持 Bean 被注入 List或者 Array 时可以通过@Order 注解或基于 Ordered 接口进行排序。
- 如果使用 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其他特性:
- Spring Web MVC的增强:新增了@RestController注解;
- 支持了WebSocket;
- 全面支持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&…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...