Spring说明文档翻译2——第二部分 Spring3.0新特性

 

第二部分 Spring3.0新特性
2.Spring3.0中的新功能和增强


如果你一直在使用spring,你会知道,spring经历了两个重要版本:2006年10月的Spring2.0和2007年11月的Spring2.5。现在,Spring3.0是第三个重要的版本。

(Java SE 和 Java EE的支持:Spring框架现在全面支持Java 5和Java 6。此外,Spring兼容J2EE 1.4和Java EE 6,同时,对Java EE6 有一些简单的支持)。

 

2.1 Java 5
整个框架针对Java 5的特点如泛型、变长参数等进行了全面的修改。我们竭尽所能任然保存代码向前兼容。在Spring AOP 的接口上,兼容原有的泛型集合、Map、FactoryBeans以及桥方法的解决方案。通用的应用程序监听自动鉴定指定类型的事件。现在,所有的回调接口如TransactionCallback 和 HibernateCallback 都定义了一个通用的结果。总之,Spring代码库针对Java 5做了最新的改进和优化。

 

Spring的TaskExecutor 被更新与Java 5的java.util.concurrent 整合。现在这些支持都像ExecutorService adapters和ThreadFactory等整合一样以一级类的方式提供。着使得遵循JSR-236标准成为可能。此外我们添加了新标签@Async用于异步方法调用。

 

2.2 文档的改进
Spring的文档也对Spring3.0中的这些新特性和改进做了更新。我们尽全力保证文档中没有错误,但错误在所难免。如果你发现了一些问题或者错误,请将错误描述发给Spring团队。

 

2.3 新文档和教程
我们有很多非常优秀的文档和教程教你如何使用Spring3的各种功能。它们都在Spring 文档页面里。

范例针对Spring3的新特性修改更新过。此外,范例也从原代码中移出到专门的SVN目录,目录是:
https://anonsvn.springframework.org/svn/spring-samples/

同样的,范例不再与Spring3一起打包,需要单独下载。然而,这个文档将继续引用一些范例(特别像Petclinic)用于说明功能。

注意SubVersion或者简称SVN上有更多信息,参阅项目首页http://subversion.apache.org/

 


2.4 新模块组织和系统构建
框架中的模块被修改并且每个模块源码数独立进行管理
org.springframework.aop

org.springframework.beans

org.springframework.context

org.springframework.context.support

org.springframework.expression

org.springframework.instrument

org.springframework.jdbc

org.springframework.jms

org.springframework.orm

org.springframework.oxm

org.springframework.test

org.springframework.transaction

org.springframework.web

org.springframework.web.portlet

org.springframework.web.servlet

org.springframework.web.struts

就像你知道的从Spring Web Flow2.0开始,我们使用新的Spring构建系统,这个系统涉及了:

Ivy-based "Spring Build" system

consistent deployment procedure

consistent dependency management

consistent generation of OSGi manifests

 

2.5 新特性预览

这里对Spring3.0做一个新特性的列表,关于特性更多的说明,会在后面章节里出现。

。Spring表达式语言
。IoC增强/基于Java的bean元数据
。多用途类型转换系统和成员格式化系统。
。从Spring Web Services项目拿来的对象到XML映射功能(OXM)。
。广泛的REST支持
。@MVC 标记
。声明模型验证
。Java EE 6的早期支持
。支持嵌入式数据库

 

2.5.1 针对Java 5 的核心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:
。子接口AsyncTaskExecutor支持标准调用接口

新的基于Java 5的从API向SPI的转换
。无状态的转换服务和转换器
。取代标准的JDK属性编辑器

类型化的ApplicationListener<E>

 

2.5.2 Spring描述语言
Spring提供一种类似Unified EL的表达式语言,这种语言功能比Unified EL要多很多。表达式语句能够定义XML和基于注释的bean定义时使用,他服务于整个Spring功能,包括基于Eclipse的Spring Source Tool Suite的代码补齐需求。

下面是使用表达式语言完成数据库属性设置的

<bean class="mycompany.RewardsTestDatabase">
    <property name="databaseName"
        value="#{systemProperties.databaseName}"/>
    <property name="keyGenerator"
        value="#{strategyBean.databaseKeyGenerator}"/>
</bean>


如果你更喜欢在你的程序中使用注释配置,也是可以的,如下:
@Repository
public class RewardsTestDatabase {

    @Value("#{systemProperties.databaseName}")
    public void setDatabaseName(String dbName) { … }

    @Value("#{strategyBean.databaseKeyGenerator}")
    public void setKeyGenerator(KeyGenerator kg) { … }
}

 

2.5.3 反转控制(IoC)容器

2.5.3.1 基于Java的bean的元数据

JavaConfig项目的一些特性现在被加入到Spring 框架里。这意味着,下面的这些注释是直接支持的:

@Configuration

@Bean

@DependsOn

@Primary

@Lazy

@Import

@ImportResource

@Value

这里有一个使用新特性为java类提供基础配置的例子:
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() {
        // wire up a session factory
        AnnotationSessionFactoryBean asFactoryBean =
            new AnnotationSessionFactoryBean();
        asFactoryBean.setDataSource(dataSource());
        // additional config
        return asFactoryBean.getObject();
    }

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

让它们工作,你需要增加下面的组件去扫描你的应用环境的XML文件

<context:component-scan base-package="org.example.config"/>
<util:properties id="jdbcProperties" location="classpath:org/example/config/jdbc.properties"/>

或者,你可以将@Configuration标签直接使用在AnnotationConfigApplicationContext类上,如下:
public static void main(String[] args) {
    ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
    FooService fooService = ctx.getBean(FooService.class);
    fooService.doStuff();
}

章节3.11.2“使用AnnotationConfigApplicationContext安装Spring容器”对于AnnotationConfigApplicationContext有更全面的描述。

 

2.5.3.2 在组件内定义bean元数据

Spring 组件支持方法使用@Bean 注释。它们通过一个工厂bean定义到容器。见章节“在组件内定义bean元数据”查看更多信息。

2.5.4 通用类型转换系统和字段格式化系统

通用类型转换系统引入了Spring3.0中。系统通过SpEL进行类型转换,也可以在spring容器和DataBinder的bean属性绑定时使用。

另外,使用格式化SPI格式化字段值引入了Spring3.0中。SPI提供了一个在客户端环境(比如:SpringMVC)比JavaBean属性编辑器更简单的鲁棒的替代。

 

2.5.5 数据层

对象到XML映射功能(OXM)从Spring Web Services项目移到了Spring核心框架。功能在org.springframework.oxm包中。更多的信息在“使用O/X映射器编辑XML”章节的oxm模块部分有更加详细的介绍。

 

2.5.6 Web层

支持构建RESTful web service和web应用是一个很令人激动的功能。在web应用中也提供了一些新注释供使用。

 

2.5.6.1 全面的REST支持

服务器端支持构建RESTful应用作为已存在的注释驱动的MVC web框架的扩展而支持的。客户端支持通过RestTemplate想其他模板一样支持(如JdbcTemplate、JmsTemplate)。客户端和服务器的REST功能都使用HttpConverter在对象与HTTP请求和相应之间进行转换。

在早期使用MarshallingHttpMessageConverter 进行对象到XML映射的功能。

参见MVC和RestTemplate章节。

 

2.5.6.2 @MVC 标记扩展

mvc命名空间引入了一个非常简单的Spring MVC配置

增加了附加的标记 @CookieValue 和 @RequestHeaders。参见“使用 @CookieValue 映射Cookie值”和“使用 @RequestHeaders 映射请求头属性”章节获取更多信息。

 

2.5.7 定义模型验证

在验证方面有一些增强,包括JSR303的支持使用Hibernate验证作为缺省验证。

 

2.5.8 早期的Java EE 6支持

支持通过新的 @Async 标记(或者EJB3.1的 @Asynchronous 标记)声明异步方法。

JSR303,JSF2.0,JPA2.0等等。

 

2.5.9 支持嵌入式数据库

方便的支持了嵌入式Java数据库引擎,包括HSQL,H2和Derby都提供支持。

 

 

你可能感兴趣的:(Spring说明文档翻译2——第二部分 Spring3.0新特性)