zoukankan      html  css  js  c++  java
  • [spring] 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。
    核心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的配置文件:

    Xml代码

     

    <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的开发指南。

    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() {
            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。

    source:http://stamen.iteye.com/blog/1463736

  • 相关阅读:
    python学习笔记之生成器和迭代器、内置函数
    python学习笔记之装饰器(语法糖)
    python学习笔记第三天
    python学习笔记第二天
    Python学习笔记第一天
    获取系统所有软件的卸载信息
    读取注册表获取计算机上已安装程序的信息
    关机重启后运行父进程
    系统关机重启,提升进程权限
    修改用户密码
  • 原文地址:https://www.cnblogs.com/kentyouyou/p/3103375.html
Copyright © 2011-2022 走看看