`

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新特性

    这是一个详细介绍Spring3.0新特性的文档

    spring3.0新特性

    spring3.0的新特性 以及注解简化mvc让他真正解耦合

    Spring3.0新特性源码

    Spring3.0新特性源码Spring3.0新特性源码

    spring3.0 全部jar包

    spring3.0 全部jar包 spring3.0 全部jar包 spring3.0 全部jar包

    Spring 3.0就这么简单_Part3.pdf

    《Spring 3.0就这么简单》语言简洁,实例丰富,可帮助读者迅速掌握使用Spring3.0进行开发所需的各种技能。《Spring3.0就这么简单》适合于具有一定Java编程基础的读者,以及在Java平台下进行各类软件开发的开发人员和...

    spring3.0jar包

    spring3.0 开发包,开发J2ee,值得拥有

    spring3.0帮助文档(包含REST资料)

    Spring 3.0重要特性总结如下: ◆Spring表达式(SpEL):用于bean定义的核心表达式分析器 ◆对基于注释的组件的更多支持:允许通过元注释创建注释的“快捷方式” ◆标准化的依赖性注入注释:对Java中依赖性注入的...

    Spring 3.0就这么简单源代码

    《Spring3.0就这么简单》主要介绍了Spring3.0的核心内容,不仅讲解了Spring3.0的基础知识,还深入讨论了SpringIoC容器、SpringAOP、使用SpringJDBC访问数据库、集成Hibernate、Spring的事务管理、SpringMVC、单元...

    带你了解Springboot3.0新特性

    Spring Boot 3.0的新特性 删除的支持 ActiveMq EhCache 2 Hazelcast 3 Atomikos 删除Spring Boot 2.X中丢弃的内容 在Spring Boot 2.X中不推荐使用的类、方法以及属性,在Spring Boot 3.0 的版本中已经删除了。所以在...

    spring3.0的API

    spring3.0的API,spring3.0的API

    spring3.0 jar包

    spring3.0 jar包

    spring3.0 api

    spring3.0 apispring3.0 apispring3.0 apispring3.0 apispring3.0 apispring3.0 apispring3.0 apispring3.0 apispring3.0 apispring3.0 apispring3.0 apispring3.0 apispring3.0 api

    spring3.0 项目源码

    spring3.0 项目源码 spring3.0 注解 的学习,spring mvc 完整项目, 请你好好学习一下!

    spring3.0新特性官方ppt资料

    本资料是本人在国外参加spring3。0 source新特性的培训后所发的ppt资料。本文档为官方编写,下载后的人可以看到ppt的内容绝对真实。

    Struts2.1+Spring3.0+JPA1.0 .pdf

    Struts2.1+Spring3.0+JPA1.0 .pdfStruts2.1+Spring3.0+JPA1.0 .pdfStruts2.1+Spring3.0+JPA1.0 .pdfStruts2.1+Spring3.0+JPA1.0 .pdfStruts2.1+Spring3.0+JPA1.0 .pdfStruts2.1+Spring3.0+JPA1.0 .pdf

    Spring3.0学习文档

    Spring3.0学习文档主要讲解的是IOC和AOP 静态代理、动态代理这些内容是Spring3.0中最难理解的重点知识点

    spring3.0+spring mvc3.0+mybaits3.0

    spring3.0+spring mvc3.0+mybaits3.0

    spring 3.0 jar包

    spring 3.0 jar包,下载无需资源分,希望大家能够用得到,另外强烈鄙视那些上传资源不完整,不经过测试的人。

Global site tag (gtag.js) - Google Analytics