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。
核心API更新到Java 5.0
在Spring 2.x中,其实我们已经可以看到这个趋势。当时Spring已经有很多类采用Java 5.0的语言特点,不过它们被谨慎地放到一个单独的tiger包中。鉴于当前基本上所有的Java应用都已采用Java 5.0开发,Spring 3.0顺应大势也将其核心API都更新到Java 5.0上,方便开发者的调用。
这个更新的最大标志是将核心API采用泛型和不定入参的特性。如BeanFactory的部分方法签名已经调整成如下形式:
- T getBean(Class<T> requiredType)
- T getBean(String name, Class<T> requiredType)
- Map<String, T> getBeansOfType(Class<T> type)
此外,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>。这样,只要指定事件的类型就可以监听某一类型的事件了。
Spring表达式语言
在低版本时,很多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注入值。
可通过Java类提供IoC配置信息
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中那样只能指定一个类名。
通用类型转换系统和属性格式化系统
引入了一种通用的“类型转换系统”,Spring的SpEL目前使用该系统进行类型转换,也可以在Spring容器及DataBinder的Bean属性绑定时使用。在格式化Bean属性值时,引入了一套格式化的SPI接口,它比早期使用的JavaBean PropertyEditors更为强大易用。
数据访问层新增OXM功能
来自于Spring Web Service项目的OXM(Object to XML,对象XML映射)已经被移到Spring的核心框架中,OXM类似于我们熟悉的ORM,它通过元数据描述对象和XML转换的映射。它对应的包是org.springframework.oxm。
Web层的增强
Spring 3.0最令人振奋的一个增强是Spring MVC提供了对REST风格编程的支持。在服务端提供了一些易用的REST注解,在调用端则提供了RestTemplate模板类,服务端和调用端都通过HttpConverter进行对象和HTTP请求/响应的转换。
我们知道在Spring 2.5中引入了一套Spring MVC的注解,如@Controller,@Request Mapping等,Spring 3.0继续完善这一注解体系,新增了@CookieValue、@RequestHeaders的注解,可以直接绑定Cookie及请求报文头的数据。
其他
- 声明式模型验证: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。
分享到:
相关推荐
Spring 3.0是Spring框架的一个重要版本,它在2009年发布,为Java开发者带来了许多新特性和改进。这个版本标志着Spring框架在企业级应用开发中的进一步成熟,加强了对Java EE 6的支持,并引入了许多现代化的开发实践...
总的来说,Spring 3.0 是一个全面升级的版本,它在提高开发效率、简化代码结构、增强可测试性和提供更广泛的企业级功能方面取得了显著的进步。无论是对于新手还是经验丰富的开发者,这个版本都提供了丰富的工具和...
#### 二、Spring 3.0 的主要新特性与增强功能 ##### 2.1 Java 5 及以上版本的支持 - **基础架构更新**:Spring 框架现在已经完全基于 Java 5 构建,并且对 Java 6 提供了全面支持。 - **兼容性**:除了对最新版本的...
在下载的"spring3.0 全部jar包"中,"dist"文件夹可能包含了所有Spring 3.0框架运行所需的库文件,包括核心容器、AOP、ORM、Web、Test等多个模块的jar包。这些jar文件是构建和运行Spring 3.0应用的基础,它们包含了...
这个压缩包中的"spring3.0"文件很可能包含了所有需要的Spring 3.0框架相关的jar包,包括核心库、AOP、Web、MVC等模块的jar,是搭建Spring 3.0环境所必需的。开发者可以通过这些jar包快速构建基于Spring 3.0的应用,...
Spring 3.0是Spring框架的一个重要版本,它在2009年发布,为Java开发者带来了许多新特性和改进。这个版本标志着Spring框架在企业级应用开发中的成熟,提供了更强大、更灵活的解决方案。 1. **依赖注入增强**: ...
4. **MVC(Model-View-Controller)框架**:Spring MVC是Spring中的Web开发模块,提供了控制器、视图解析器、模型绑定等功能,使Web应用的构建更加简洁。 5. **XML配置简化**:Spring 3.0引入了基于注解的配置,...
Spring 3.0是Spring框架的一个重要版本,它引入了许多新特性和改进,极大地扩展了其功能和灵活性。本文将详细解析Spring 3.0 API的主要特性,帮助开发者更好地理解和利用这一强大的Java企业级开发工具。 一、核心...
Spring3.0是该框架的一个重要版本,它引入了许多新特性和改进,为开发者提供了更强大的功能和更好的灵活性。在这个CHM文件中,你将找到3.2版本的API文档,涵盖了所有类和常量字段值,这对于深入理解和使用Spring3.0...
Spring 3.0是该框架的一个重要版本,它带来了许多新特性、改进和优化,旨在提升开发者效率和软件的可维护性。在这个发行版中,Spring引入了模块化设计,增强了对Java EE 6的支持,以及对Web MVC、AOP、数据访问和...
Spring 3.0 是 Spring 框架的一个重要版本,发布于2009年,它带来了许多新特性和改进,极大地增强了 Java 开发者在企业级应用开发中的灵活性和效率。Spring 框架是一个全面的后端开发解决方案,核心特性包括依赖注入...
Spring 3.0重要特性总结如下: ◆Spring表达式(SpEL):用于bean定义的核心表达式分析器 ◆对基于注释的组件的更多支持:允许通过元注释创建注释的“快捷方式” ◆标准化的依赖性注入注释:对Java中依赖性注入的...
Spring3.0版本是一个重要的里程碑,引入了许多新特性和增强,旨在提高开发效率和灵活性。本资源包含Spring3.0的API文档(chm格式)、所有必要的jar包以及源码,非常适合开发者在学习和开发过程中参考。 **Spring3.0...
### 二、Spring 3.0新特性概览 #### 2.1 Java 5全面支持 Spring 3.0对Java 5进行了全面的支持,充分利用了泛型、枚举、注解等新特性,提升了代码的安全性和可读性。 #### 2.2 文档与教程更新 Spring 3.0不仅在...
在Spring 3.0版本中,引入了许多增强的功能和改进,使得它成为当时最流行和广泛使用的Java框架之一。 1. **依赖注入(DI)与IoC容器**: Spring 3.0的中心概念是依赖注入(Dependency Injection),也称为控制反转...
这个"spring3.0最新lib包"包含了Spring框架的不同模块,每个模块都有独立的JAR文件,允许开发者根据实际项目需求来选择和引入必要的依赖,而不是一次性加载整个大的spring.jar,这大大减小了应用的体积并提高了性能...
Spring 3.0是Spring框架的一个重要版本,它在2009年发布,引入了许多新的特性和改进,使得Java企业级应用的开发变得更加简洁和高效。本篇将围绕Spring 3.0的核心特性、Maven的使用以及如何通过源码来深入理解Spring...
Spring 3.0是Spring框架的一个重要版本,它在2009年发布,为Java开发者带来了许多新特性和改进。这个"spring 3.0 jar spring最新开发包"包含了该版本的所有核心组件和库,使得开发者能够进行高效且灵活的Java应用...
Spring3.0是Spring框架的一个重要版本,引入了许多新特性和改进。其中,最引人注目的是对JSR-303 Bean Validation的支持,使得数据验证更加方便。此外,Spring3.0强化了对RESTful Web服务的支持,增加了对AspectJ的...