`

Spring3.0的新特性及其分析

阅读更多
最近公司考虑将内部的服务层框架SCM进行升级,不仅支持原来的RMI远程调用机制,而且支持Hessian等多协议的远程调用。于是让我研究一下
Spring3.0有哪些新特性,考虑是否有必要将Spring顺便升级到3.0。翻了下Spring3.0的官方参考文档,总结的新特性如下:


一、Spring3.0以后不再提供一个大的完整的jar包,而是分成20个小的jar包:
  • org.springframework.aop, 包含在应用中使用Spring的AOP特性时所需的类。
  • org.springframework.asm,Spring独立的asm程序,Spring2.5.6的时候需要  asm.jar 包,3.0开始提供自己独立的asm.jar
  • org.springframework.aspects,提供对AspectJ的支持,以方便的将面向切面的功能集成进IDE中,比如Eclipse AJDT.
  • org.springframework.beans,所有应用都要用到,它包含访问配置文件,创建和管理Bean以及进行反转共控制和依赖注入操作时所需的类
  • org.springframework.context,为 Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext 特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如 Velocity、 FreeMarker、 JasperReports 集成的类, 以及校验 Validation 方面的相关类。
  • org.springframework.context.support,包含支持缓存Cache(ehcache)JCA、JMX、邮件服务(Java Mail、Mail)COS、任务计划Scheduling(Timer、Quartz)方面的类。
  • org.springframework.core,包含 Spring 框架基本的核心工具类,Spring 其它组件要都要使用到这个包里的 类,是其它组件的基本核心。
  • org.springframework.expression,包含Spring 表达式语言相关的类,应用使用到SpEL时需要添加这个jar包。
  • org.springframework.instrument.tomcat,Spring3.0对Tomcat的连接池的集成
  • org.springframework.instrument,Spring3.0 对服务器的代理接口。
  • org.springframework.jdbc,包含对 Spring 对 JDBC 数据访问进行封装的所有类。
  • org.springframework.jms,提供了对JMS1.0.2/1.1 的支持类。
  • org.springframework.orm,包含Spring对DAO特性集进行了扩展,使其支持iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。这个jar文件里大部分的类都要依赖spring-dao.jar里的类,用这个包时你需要同时包含 spring-dao.jar包。
  • org.springframework.oxm,Spring 对 Object/XMl 的映射支持,可以让Java与XML之间来回切换。
  • org.springframework.test,对Junit等测试框架的简单封装。
  • org.springframework.transaction,为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。
  • org.springframework.web,包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。
  • org.springframework.web.portlet,对SpringMVC的增强,包含SpringMVC相关的类
  • org.springframework.web.servlet,对J2EE6.0的Servlet3.0的支持。
  • org.springframework.web.struts,对Struts框架支持,可以更方便更容易的集成Struts框架。

Spring的构建系统以及依赖管理使用的是Apache Ivy。

二、 增加的新特性:

     1、 Spring Expression Language (Spring表达式语言)

     2、 IoC enhancements/Java based bean metadata (增强的IOC,基于java的Bean元数据) 

     3、 General-purpose type conversion system and field formatting system (通用类型转换系统和字段格式化系统)

     4、 Object to XML mapping functionality (OXM) moved from Spring Web Services project (对象和XML之间的映射,来自于Srping Web Services项目)

     5、 Comprehensive REST support (广泛的REST支持)

     6、 @MVC additions (Spring的MVC注解增强)

     7、 Declarative model validation (声明试模型验证)

     8、 Early support for Java EE 6 (提前对JEE6的支持)

     9、 Embedded database support (嵌入式数据库的支持)

     关于新特性,下面会有详细说明。

三、 API更新:

     1、 BeanFactory接口尽可能的返回明确的实例,例如:

           T getBean(Class<T> requiredType)

           T getBean(String name, Class<T> requiredType)

           Map<String, T> getBeansOfType(Class<T> type)

           这样我们在通过容器获取bean时就可以使用泛型,而不必进行强制转化,另外一个方面又可以根据bean的类型来获取Bean的实例。

      2、 Spring的TaskExecutor现在继承java.util.concurrent.Executor接口。

           扩展的子接口 AsyncTaskExecutor 支持标准的具有返回结果 Futures 的 Callables.

      3、 新的基于 Java5 的 API 和 SPI 转换器

            无状态的 ConversionService 和 Converters

            取代标准的 JDK PropertyEditors

      4、 类型化的 ApplicationListener<E>,

            这是一个实现"观察者设计模式"使用的事件监听器. 基于事件的编程模式, 好处多多, 在项目中应该考虑使用, 基于事件,状态迁移的设计思路, 有助于理清软件流程,和减少项目的耦合度.

四、 Spring Expression Language (Spring 表达式语言,简称SpEL)

         Spring3.0引入了一种新的表达式语言:SpEL. SpEL使得java具有动态语言的风格,可以在运行时获取表达式的值。依赖注入时可以使用SpEL表达式语言, 不再只是原来简单的属性文件变量。xml配置

         文件和java注解都支持SpEL,eg:

         配置文件:

 <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) { … }

}


五、 IoC enhancements/Java based bean metadata(增强的IOC,基于java的bean配置)

          增强的IOC,配置Bean时除了原来的XML和Annotation,现在支持一种java类和元数据结合的配置方式。新增注解:

           @Configuration、@Bean、@DependsOn、@Primary、@Lazy、@Import、@ImportResource、@Value。eg:

           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"/>


         xml配置文件主要用于指定java类配置文件和引用到的属性文件的位置。这个文件是可选的,当时使用原来的ClassPathXMLApplicationContext等获取BeanFactory时,

         这个文件是必须的。或者直接使用AnnotationConfigApplicationContext时,该文件可不要。eg:
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
FooService fooService = ctx.getBean(FooService.class);


六、 General-purpose type conversion system and field formatting system

         Spring3.0加入了一个通用的类型转换系统,目前它被SpEL用作类型转换,并且可能被一个Spring容器使用,用于当绑定bean的属性值的时候进行类型转换另外,

         还增加了一个字段格式化系统,它提供了更简单的使用并且强大的功能以替代UI环境下的Javabean的PropertyEidtors,例如在SpringMVC中。 

七、 Object to XML mapping functionality (OXM) moved from Spring Web Services project

         对象到XML之间的映射功能原来是在Spring Web services project项目中的,现在已经迁移到Spring框架的核心中,位于org.springframework.oxm中。

         提供JAXB,XmlBeans以及XStream等方式的实现。

八、 Comprehensive REST support (增强的REST支持)

        增强的REST支持。在web层的新特性是增加REST风格的web服务和web应用的支持,另外还新增了一些任何web应用都可以使用的新的注解。

        服务端对于REST风格的支持,是通过扩展既有的注解驱动的MVC web 框架实现的.

        客户端的支持则是 RestTemplate 类提供的,基于HttpClient.

        无论服务端还是客户端REST功能,都是使用HttpConverter来简化对HTTP请求和应答过程中的对象到表现层的转换过程.

         MarshallingHttpMessageConverter 使用了上面提到的"对象到 XML 的映射机制".

九、 @MVC additions (SpringMVC注解增强)

        SpringMVC注解有所增强,新增了诸如@CookieValue 和 @RequestHeaders 这样的注解等.

十、 Declarative model validation(声明试模型验证)

        支持JSR303,使用Hibernate Validator 作为默认实现, eg:
public class Person {
	@NotNull
	@Max(64)
	private String name;

        @Min(0)
	private int age;
}

十一、 Early support for Java EE 6(JEE6早期支持)

            提前对JEE6的支持。提供了使用@Async注解对于异步方法调用的支持(或者EJB3.1里的@Asynchronous)

            另外,新增对JSR303,JSF2.0,JPA2.0等的支持。

十二、 Embedded database support(嵌入式数据库的支持)

            对于嵌入式的Java数据库引擎提供了广泛而方便的支持,包括HSQL,H2和Derby(方便测试).
分享到:
评论

相关推荐

    spring3.0 全部jar包

    在Spring 3.0版本中,引入了许多新特性和改进,使得它成为当时开发人员的首选框架之一。 Spring 3.0的核心特性包括: 1. **依赖注入(Dependency Injection, DI)**:这是Spring框架的核心功能,允许开发者将对象...

    spring 3.0 jar 包

    以下是一些关于Spring 3.0及其jar包的关键知识点: 1. **依赖注入 (Dependency Injection, DI)**:Spring的核心特性之一,允许对象之间的依赖关系被外部容器管理,而不是对象自身。通过构造器注入、设值注入和接口...

    spring3.0发行版

    Spring 3.0是该框架的一个重要版本,它带来了许多新特性、改进和优化,旨在提升开发者效率和软件的可维护性。在这个发行版中,Spring引入了模块化设计,增强了对Java EE 6的支持,以及对Web MVC、AOP、数据访问和...

    Spring3.0中文帮助文档

    以上只是Spring 3.0中部分关键特性和功能的概述,实际的中文帮助文档会详细解释这些概念,提供使用示例,并指导开发者如何在项目中有效地应用Spring框架。通过深入学习和实践,开发者能够充分利用Spring 3.0的优势,...

    spring 3.0 src

    Spring 3.0引入了许多新特性,优化了核心模块,提升了整体架构的灵活性,为开发者带来了更为强大的功能和更高效的开发体验。 1. **依赖注入(Dependency Injection,DI)**:Spring的核心特性之一,允许开发者通过...

    spring3.0_doc_api

    这个压缩包"spring3.0_doc_api"包含的是Spring 3.0的官方API文档,通常以CHM(Compiled HTML Help)格式呈现,这种格式便于离线查阅和搜索。 **Spring框架核心概念** 1. **依赖注入(Dependency Injection, DI)**...

    Spring3.0源代码

    1. **依赖注入**:Spring3.0的核心特性之一,允许开发者通过配置来管理对象之间的依赖关系,而不是硬编码这些依赖。在`src`目录下,可以找到`org.springframework.beans`和`org.springframework.context`包,这两个...

    spring3.0的demon

    在这个"spring3.0的demon"压缩包中,包含了Spring 3.0.5版本的jar包及其相关的支持jar包,这为开发者提供了一个完整的运行环境,以便于理解和学习Spring 3.0的核心功能。 1. **依赖注入(Dependency Injection, DI...

    spring3.0的最新官方例子源码spring-samples

    这个"spring3.0的最新官方例子源码spring-samples"压缩包包含的是Spring官方提供的示例代码,旨在帮助开发者理解和学习如何在实际项目中应用Spring框架。以下是对这些源码的详细解析: 1. **依赖注入(Dependency ...

    spring3.0的xsd文件.rar

    Spring 3.0是Spring框架的一个重要版本,它引入了许多新特性和改进,极大地提升了开发效率和灵活性。XSD(XML Schema Definition)文件在Spring框架中扮演着核心角色,它们定义了Spring配置文件的结构和规则,使得...

    Spring3.0 jar包

    Spring3.0版本是Spring框架的一个重要里程碑,它引入了许多新特性并优化了已有的功能,以提升开发效率和应用程序的可维护性。在这个压缩包中,你将找到所有必要的jar文件,这些文件包含了Spring3.0框架的核心组件。 ...

    Spring3.0xMVC jar包关系

    Spring3.0x版本引入了一系列改进和新特性,其中对于依赖管理进行了优化,使得开发者能够更方便地整合不同的技术栈。本文将深入探讨Spring3.0x MVC中的依赖关系,并详细介绍各个依赖分组及其对应的JAR文件。 #### ...

    Spring3.0学习笔记

    Spring 3.0是Spring框架的一个重要版本,它在2009年发布,引入了大量新特性,进一步增强了Spring的灵活性和可扩展性。在这个版本中,Spring框架的改进和增强主要集中在以下几个方面: 1. **依赖注入(Dependency ...

    spring3.0帮助文档

    Spring 3.0 版本在设计之初就考虑到了对Java 5的支持,并且引入了新的模块化组织结构以及构建系统,这些变化使得Spring 3.0成为了更为强大和灵活的应用开发平台。 #### 二、Spring 3.0 的主要特性 ##### 2.1 Java ...

    spring3.0官方示例代码

    Spring 3.0是Spring框架的一个重要版本,它在2009年发布,引入了大量新特性,提升了性能,并增强了对Java EE 6的支持。这个官方示例代码集是学习和理解Spring 3.0核心概念及其实现机制的理想资源。其中包含的"spring...

    spring3.0 xsd文件

    Spring 3.0引入了许多新特性和改进,包括对Java 5和6的全面支持、简化XML配置、增强的AOP功能、对JSR-330依赖注入注解的支持以及对Web服务的增强。这些改变都反映在相应的XSD文件中。 在Spring 3.0的XSD文件中,你...

    spring3.0就是这么简单代码

    Spring 3.0是Spring框架的一个重要版本,它引入了许多新特性,如支持JSR-303(Bean Validation)进行数据校验,对RESTful服务的支持增强,以及改进的AOP(面向切面编程)等。书中可能详细介绍了这些新功能,并通过...

    spring3.0的中文帮助文档和权威开发指南

    Spring 3.0是该框架的一个重要版本,引入了许多新特性,提升了性能,并增强了对其他技术的集成。这篇中文帮助文档和权威开发指南将带你深入理解Spring 3.0的核心概念和实践技巧。 1. **依赖注入(Dependency ...

Global site tag (gtag.js) - Google Analytics