Spring 3.0的新功能

2009年9月发布Spring 3.0第一个候选版本,2009年12月正式发布了Spring 3.0版本,在本书撰写时(2011年1月)的最新版本是Spring 3.0.5。比之于Spring 2.x,有众多新功能被添加到Spring中:它基于Java 5.0语言特性,提供了EL(Expression Language,表达式语言)和REST的支持,同时还支持JSR-330(依赖注入)和JSR-303(Bean 验证)的规范。在进入Spring具体内容的学习之前,有必要了解一下这些新功能。由于有些新功能可能是在Spring 3.0添加的,也有可能是在Spring 3.0.x等版本添加的,为了叙述方便,在一般情况下,我们统一称之为Spring 3.0。

[b][size=large]核心API更新到Java 5.0[/size][/b]

在Spring 2.x中,其实我们已经可以看到这个趋势。当时Spring已经有很多类采用Java 5.0的语言特点,不过它们被谨慎地放到一个单独的tiger包中。鉴于当前基本上所有的Java应用都已采用Java 5.0开发,Spring 3.0顺应大势也将其核心API都更新到Java 5.0上,方便开发者的调用。
这个更新的最大标志是将核心API采用泛型和不定入参的特性。如BeanFactory的部分方法签名已经调整成如下形式:
[list]
[*] T getBean(Class<T> requiredType)
[*] T getBean(String name, Class<T> requiredType)
[*] Map<String, T> getBeansOfType(Class<T> type)
[/list]
此外,Spring让TaskExecutor直接扩展java.util.concurrent.Executor的接口,在Spring 2.x中TaskExecutor则是一个独立的接口。AsyncTaskExecutor扩展于TaskExecutor,支持在一段时间后异步调用某个方法。
新增了一个用于类型转换的ConversionService接口,它是Spring 3.0新增类型转换系统的核心接口,其提供的方法都支持泛型。Spring 3.0使用类型转换系统替换掉原来标准JDK的JDK PropertyEditors。
最后,Spring的事件监听器也支持泛型,形如ApplicationListener<E extends ApplicationEvent>。这样,只要指定事件的类型就可以监听某一类型的事件了。

[b][size=large]Spring表达式语言[/size][/b]
在低版本时,很多Spring开发者迫切希望Spring添加的一个功能就是脚本化配置的能力。这个梦想在Spring 3.0中终于得到了实现。Spring提供的脚本称为SpEL,它和统一EL(Express Language)类似,但提供了更为强大的功能,如可以在Spring的XML配置文件或Spring配置的注解中使用。
这是一个很强大的功能,可以在Bean配置时和Java实例化对象进行交互,获取动态的特性。如你可以使用执行某个Bean的方法,让方法的返回值作为另一个Bean属性的值。
通过基于Eclipse的SpringSource Tool Suite,在IDE环境中可以获取表达式语言诱导的功能。更多关于SpEL的功能,我们将在第4章中讲解。来看一个使用SpEL的配置文件:

<bean id="bean1" class="com.baobaotao.Bean1">
<bean class="com.baobaotao.Bean2">
<property name="userName" value="#{bean1.userName}"/>
<property name="password" value="#{bean1.password}"/>
</bean>


以上配置块中以#{} 表示的部分就是使用了SpEL表达式的配置,它将调用bean1的相应方法为Bean2注入值。

[b][size=large]可通过Java类提供IoC配置信息[/size][/b]

Spring拥有众多的子项目,Spring在升级时经常将那些成熟且广受欢迎的子项目整合到Spring主项目中。Spring JavaConfig是一个通过Java类提供Spring配置元信息的子项目,Spring 3.0已经将其纳入到Spring框架的核心模块中。
在早期版本中,Spring仅提供XML配置方式,在Spring 2.5中提供了基于注解的配置方式,在Spring 3.0中则提供了基于Java类的配置方式。这三种配置方式无非是形式上的区别,最终提供的都是Spring配置的元数据。Spring要提供这么多配置方式,并不是要用一种方式替换另一种方式,它们在不同的应用场景下将表现出各自的优势。所以你可能会同时使用到这三种方式。
下面是使用Java类进行配置的例子,它直接来自于Spring的开发指南。
package org.example.config;
@Configuration
public class AppConfig {
private
@Value("#{jdbcProperties.url}")
String jdbcUrl;
private
@Value("#{jdbcProperties.username}")
String username;
private
@Value("#{jdbcProperties.password}")
String password;

@Bean
public FooService fooService() {
return new FooServiceImpl(fooRepository());
}

@Bean
public FooRepository fooRepository() {
return new HibernateFooRepository(sessionFactory());
}

@Bean
public SessionFactory sessionFactory() {
AnnotationSessionFactoryBean asFactoryBean =
new AnnotationSessionFactoryBean();
asFactoryBean.setDataSource(dataSource());
return asFactoryBean.getObject();
}

@Bean
public DataSource dataSource() {
return new DriverManagerDataSource(jdbcUrl, username, password);
}
}

这个Java类通过Spring特定的注解,提供了配置的元数据信息,定义了Bean。它和XML或注解的配置方式相比,最大的优势是灵活!使用了@Bean的方法返回一个Bean,你可以通过代码决定要如何实例化这个Bean,而不像在XML中那样只能指定一个类名。

[b][size=large]通用类型转换系统和属性格式化系统[/size][/b]

引入了一种通用的“类型转换系统”,Spring的SpEL目前使用该系统进行类型转换,也可以在Spring容器及DataBinder的Bean属性绑定时使用。在格式化Bean属性值时,引入了一套格式化的SPI接口,它比早期使用的JavaBean PropertyEditors更为强大易用。

[b][size=large]数据访问层新增OXM功能[/size][/b]

来自于Spring Web Service项目的OXM(Object to XML,对象XML映射)已经被移到Spring的核心框架中,OXM类似于我们熟悉的ORM,它通过元数据描述对象和XML转换的映射。它对应的包是org.springframework.oxm。

[b][size=large]Web层的增强[/size][/b]

Spring 3.0最令人振奋的一个增强是Spring MVC提供了对REST风格编程的支持。在服务端提供了一些易用的REST注解,在调用端则提供了RestTemplate模板类,服务端和调用端都通过HttpConverter进行对象和HTTP请求/响应的转换。
我们知道在Spring 2.5中引入了一套Spring MVC的注解,如@Controller,@Request Mapping等,Spring 3.0继续完善这一注解体系,新增了@CookieValue、@RequestHeaders的注解,可以直接绑定Cookie及请求报文头的数据。


[b][size=large]其他[/size][/b]

[list]
[*]声明式模型验证:Sping 3.0对模型校验进行了很多的增强。首先,它全面支持JSR-303的Bean验证API;其次,可以使用Spring的DataBinder对Bean进行校验;最后,Spring MVC支持声明式验证。
[*]对JavaEE 6的支持:Spring 3.0可以使用@Async或EJB3.1的@Asynchronous注解异步地调用某个方法。此外,还支持JSR-303、JSF 2.0及JPA 2.0中的大部分功能。
[*]支持内嵌的数据库:提供便捷的方法支持内嵌数据库引擎,如HSQL、H2和Berby。
[/list]
AMD MI50 Linux ROCm 6.4 手动编译与大模型推理实战 GPU加速计算是现代AI推理的核心基础,其性能依赖于硬件架构、驱动栈与运行时环境的深度协同。ROCm作为AMD开源GPU计算平台,采用‘自下而上’的Linux生态集成路径,强调对上游内核、编译器与固件的强耦合。MI50基于Vega 20(gfx900)架构,虽具备32GB HBM2高带宽显存与14.7 TFLOPS FP16算力,但因ROCm官方支持策略转向CDNA架构,自6.5版本起被移出支持列表,仅ROCm 6.4仍提供实验性兼容——这使其成为Linux下部署私有大模型的关键‘最后一班船’。本文围绕MI 阅读详情

相关推荐

STM32F103C8T6 驱动2位共阳数码管(基于 74HC595 和 PNP 三极管)

整体设计思路是通过 STM32F103C8T6 控制 74HC595 和 PNP 三极管,实现共阳数码管的显示功能。最初的电路设计中,三极管发射极接 5V 电源,这导致了数码管两位显示相同数字的问题。数码管能够稳定显示 0-99的数字。

qq_40289410的博客 2212

Spring3.0带来的新特性

一、首先,模块的组织更加的细致,从那么多的jar分包就看的出来: Spring的构建系统以及依赖管理使用的是Apache Ivy,从源码包看出,也使用了Maven。Maven确实是个好东西,好处不再多言,以后希望能进一步用好它。二、新特性如下:Spring Expression Language (Spring表达式语言)IoC enhancements/Java base

未来之路 1万+

Matlab图像处理频域滤波实现——高斯低通、高通、带通带阻滤波器

如果你想要进一步了解更多的相关知识,

小嘤熊的博客 1万+

新版Spring Boot 3.0:探索最新功能与改进,是否该考虑升级

Spring boot 3.0于2022年11月正式发布了,这次的发布对于我们普通程序员的影响有多少呢?Spring Boot是一个开发框架,专门用于快速构建可运行的Spring应用程序。Spring Boot 3.0是该框架的最新版本,其中包含了一些新的功能和改进。其中一个重要的更新是对Java 15的支持,这意味着您可以使用最新的Java版本来开发和运行Spring Boot应用程序。

m0_57781768的博客 3987

探索Python融合地学:一文解决osgeo库安装失败问题

总结一下,要安装osgeo模块,关键在GDAL依赖库的安装,如果能够顺利安装GDAL依赖库,因其是osego的模块,因此osgeo的部分模块也能够得到自动安装,此时再运行代码,发现代码并不报错,能够正常运行了。第一步,我们要安装imagecodecs库,它支持多种常见的图像格式,当然也包含我们的目标tif格式,为方便后续的图像处理和安装osgeo模块,先安装此库。目前GDAL已经更新到了3.10版本,这里主要看你的Python版本是上面,小编用的是Python3.13,电脑是64位的,因此,我们选择。

Promising_GEO的博客 5461

使用nvm离线安装、管理node多版本以及配置环境变量(亲测)

使用nvm离线安装、管理node多版本以及配置环境变量(亲测)

JMHJAVA的专栏 1328

SpringBoot3中的性能提升介绍

Spring Boot 3在性能优化上取得了显著提升,主要聚焦在启动时间优化、内存占用减少、异步执行和日志管理四个方面。通过精简依赖、使用Lazy Initialization、禁用特定自动配置类等策略,有效缩短了应用启动时间。同时,通过精简配置和Bean、使用原型范围的Bean以及优化JVM参数,降低了内存占用。异步执行方面,Spring Boot 3提供了@Async注解和CompletableFuture类,提高了应用处理耗时任务的能力。

一个老Java开发的自白 1412

手把手教你用DLP4500投影仪玩转结构光3D扫描(附固件烧录与序列设置避坑指南)

本文详细解析了如何使用DLP4500投影仪搭建结构光3D扫描系统,涵盖硬件组装、固件烧录、图案生成与优化等全流程。重点解决了固件烧录失败、图像格式错误等常见问题,并提供了实用的避坑指南和进阶技巧,帮助读者快速掌握DLP4500在3D扫描中的应用。

weixin_42662293的博客 301

(我阳了)SpringBoot3正式版于11月24日发布:都有哪些新特性?- 第456篇

所以,如果你想升级 Spring Boot 3.0,请确保你的 JDK 版本是否符合要求,毕竟现在大部分人还是用的 Java 8,升级 JDK 版本不是一件小事,虽然现在 Java 17+ 是免费使用的,但不确定哪个时间点会收费,也可以转战 OpenJDK 或者其他开源的 JDK 版本。时隔四年多,Spring Boot 3.0 这是一个断崖式的版本更新,这四年多的时间,技术日新月异,无疑更新了太多的特性,也修复了海量的bug 的性能提升,今天栈长就聊聊 Spring Boot 3.0 的几个重大新特性。

悟纤学院 1699

【UGUI】二、Text(TMP) 文本

Text(TMP)、导入中文字库

天行健,君子以自强不息 3365

用KalmanNet搞定非线性状态估计:当卡尔曼滤波遇上神经网络

本文深入探讨了KalmanNet如何将神经网络与卡尔曼滤波结合,以解决非线性状态估计中的模型失配和噪声不确定性问题。通过保留经典滤波框架并用RNN学习卡尔曼增益,该方法在无人机导航、机器人定位等场景中实现了模型驱动与数据驱动的优势互补,提升了估计的鲁棒性和灵活性。

mango的博客 309

SpringBoot3 正式发布:有哪些新玩法?

SpringBoot3 正式发布:有哪些新玩法?

IT大神帅杰的博客 4091

PCL 读取和保存点云

PCL (Point Cloud Library) 是一个用于处理 3D 点云数据的开源库。在处理点云数据时,常见的任务包括点云的读写和可视化。PCL 提供了强大的 IO 模块来读取和写入各种格式的点云文件,并且提供了可视化模块来对点云进行渲染和显示。点云的读写与显示是很多 3D 数据处理任务的基础步骤,通过这些步骤,可以对点云进行预处理、分析和操作。

纵马踏花向自由 1737

Spring Boot 3.1.0 发布,添加大量新功能和改进

Spring Boot 3.1.0 现已发布,此版本添加了大量新功能和改进。

IT_1024的博客 1069

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

springboot2稳定版本_重要版本Spring Boot 2.3.0发布 - spring.io

重要版本Spring Boot 2.3.0于2020年5月15日发布,此版本增加了大量新功能和改进。有关完整的升级说明以及新的和值得注意的功能,请参阅发行说明。2.3的新功能依赖升级Spring Boot 2.3移至几个Spring项目的新版本:Spring Data NeumannSpring HATEOAS 1.1Spring Integration 5.3Spring Kafka 2.5Sp...

weixin_30884379的博客 1410

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Spring Boot 2.3.0 引入了许多新特性和改进,以下是一些主要的新功能

Spring Framework 5.3.0-M1 发布:这是Spring 5.3的第一个里程碑版本,包含了许多新特性和改进,如对反应式编程模型的更好支持。Spring Boot 2.3.0 发布:这个版本带来了许多新特性和改进,包括对Java 14的支持、更简单的配置选项以及对各种库的升级。这些数据库的支持是通过Spring Data项目实现的,它提供了统一的编程模型来简化数据访问层的开发。欢迎来到春季本周的另一档肉类餐!: 对测试框架的支持进行了增强,包括更好的集成测试支持和更详细的错误报告。

[Blog][Domain] programb.blog.youkuaiyun.com 528

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

第3章 Spring 4.0增强和新功能 I -- Spring4.3.8参考文档中文版

第二部分 Spring Framework 4.x中有什么新功能?3. Spring 4.0增强和新功能 ISpring框架第一个版本发布于2004年,自发布以来已历经三个主要版本更新: Spring 2.0提供了XML命名空间和AspectJ支持; Spring 2.5增加了注释驱动(annotation-driven)的配置支持; Spring 3.0增加了对Java 5+版本的支持和@Co

sunrainamazing的博客 1229

Spring 的新功能

Spring 3.1 新功能Spring 3.1 提供了声明式缓存的支持以及众多针对 Spring MVC 的功能增强。以下为 Spring 3.1 重要的功能升级: Spring 3.1 引入了环境 profile 功能,就能根据应用部署在什么环境之中选择不同的数据源 bean; 在 Spring 3.0 基于 Java 的配置之上,Spring 3.1 添加了多个 enable 注解; 添加了

TinyDolphin的博客 505

spring3.0新特性

spring3.0新功能   1. IOC简单增强    从IOC容器中获取bean不再用类型转换,可以使用泛形方式来获取   2.  可以用一个java类来作为一配置文件.   3.spel表达式语言  ...

hyj956948933的专栏 144

Spring Boot 3.0.0 M3和2.7.0发布,2.5.x将停止维护,这节奏你还更得上吗?

昨晚(5月19日),Spring Boot官方发布了一系列Spring Boot的版本更新,其中包括:Spring Boot 3.0.0-M3Spring Boot 2.7.0Spring Boot 2.6.8Spring Boot 2.5.14Spring Boot 3.0.0-M3此版本包括74个bug修复、文档改进和依赖项升级,其中值得注意的新功能包括:Microm...

程序猿DD 917

spring3.0与3.1新特性

spring3.0特性: 一、首先,模块的组织更加的细致,从那么多的jar分包就看的出来: Spring的构建系统以及依赖管理使用的是Apache Ivy,从源码包看出,也使用了Maven。 Maven确实是个好东西,好处不再多言,以后希望能进一步用好它。 二、新特性如下: Spring Expression Language (Spring表达式语言) I

Davin_(幸福在于感悟).......... 3185

第4章 Spring 4.0增强和新功能 II -- Spring4.3.8参考文档中文版

4 Spring 4.1增强和新功能 II @sunRainAmazing 4.1 JMS改进Spring 4.1引入了一个更简单的基础架构,使用@JmsListener注解bean方法来注册JMS监听端点 .XML命名空间已经通过增强来支持这种新的方式(jms:annotation-driven),它也可以完全通过Java配置(@EnableJms, JmsListenerContainerF

sunrainamazing的博客 752

第6章 Spring 4.0增强和新功能 VI -- Spring4.3.8参考文档中文版

6 Spring框架中的新功能和增强功能 VI sunRainAmazing 6.1核心集装箱改造核心容器异常提供更丰富的元数据,以编程方式进行评估。Java 8默认方法被检测为bean属性getters / setters。在注入主bean的情况下,不会创建延迟候选bean。@Autowired如果目标bean只定义一个构造函数 ,则不再需要指定注释。@Configuration 类

sunrainamazing的博客 466

Spring Boot 3.4.0 发布:功能概览与示例

Spring Boot 3.4.0 带来了许多增强功能,使现代应用开发更加高效、便捷和强大。以下是最新功能的完整概述,以及一些帮助您快速入门的代码示例。启用 JSON 或结构化日志记录时,Spring Boot 的启动横幅会自动禁用,以减少日志混乱。Spring 现原生支持虚拟线程,可用于任务调度和异步处理,无需再添加。支持多个 Docker Compose 文件,适用于不同环境的配置合并。支持 Hibernate 的本机属性,提升了兼容性和配置灵活性。,支持自定义配置的运行和测试。

小DuDu的博客 1828
上一篇: Spring带给我们什么
下一篇: 单元测试系列之1:开发测试的那些事儿
quickselect
博客等级 码龄20年 1粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值