JDK支持: Spring框架支持包括JDK1.3在内的所有JDK版本,JDK1.3、1.4和1.5均支持,但如果使用JDK1.3的话,某些Spring的高级功能可能无法使用。 2.1
绪论 如果你一直在使用Spring框架,你应该知道Spring刚发布了主版本。该版本包括许多新的特性,并且许多现有功能被重新优化、修正。实际上,Spring框架已经足够完善,所以Spring开发团队决定增加Spring的下一个发布版本的版本号;这样,Spring2.0于2005年12月在弗罗里达州召开的 Spring Experience会议上发布。 本周主要介绍了Spring2.0的新的和被优化的特性。目的是通过对于新特性的总结、介绍,使得那些经验丰富的Spring架构师和开发者们能够快速的了解Spring2.0的新功能。要进一步了解这些新特性,请参考本章的相关超链接。 下面提及的一些新的特性已经(或者将要)被固化到Spring1.2.x版本线里,可以参考1.2.x发布版的changelogs进一步了解。 2.2
反转控制容器(
IoC Container
) IoC容器是2.0中重点升级、优化的特性之一。 2.2.1
更便捷的
XML
配置 由于基于XML Schema技术的XML配置语法的出现,使得Spring的XML配置变得更加容易。如果你要利用Spring提供的新的标签(tags)(Spring团队建议你最好使用新的标签,因为使得配置文件不再冗长且易于阅读),那么请参考附录A,XML Schema-Based配置。 如果你不能利用XML-Schema配置方式,你可以利用为Spring2.0新升级的DTD。下面给出DOCTYPE声明以便于你在配置文件中引用,当然,感兴趣的读者可以阅读包含在Spring2.0分发的“dist/resources”目录下面的DTD文件(spring-beans-2.0.dtd)。 【Spring参考手册-第二章 Spring2.0中的新特性】
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
|
2.2.2
新的
Bean
的范围 Spring的以前版本在IoC容器级别支持两种不同的Bean的范围(singleton和prototype)。依赖于分发Spring的环境,Spring2.0提供了许多新的Bean的范围(例如,Web环境下的request和session beans),同时,提供“hooks”(希望能有更好的命名),Spring用户可以使用它来创建自己的Bean的范围。 应该说明一点,尽管对于singleton-和prototype-两种范围的beans的内部实现方式在Spring2.0中已经发生了改变,但这种改变对于用户来说是透明的。也就是说,现有的配置信息不需要修改,也不会被破坏。 新的beans范围在3.4节“Bean范围”有详细描述。 2.2.3
可扩展的
XML
验证机制 新版本的XML配置不但易于写,而且易于扩展。 “扩展性”意味着:作为应用开发者、或者作为第三方的框架或者产品可以订制标签(tags),这样别的开发者就可以将这些订制的标签应用到自己的Spring配置文件。这样你就可以在你自己的组件配置文件中加入你自己的业务模型描述语言(这个词汇不太准确)。 订制Spring标签可能并非对于每个应用开发者或者企业架构师都是令人感兴趣的事情。我们期待着第三方的厂家能够有兴趣定制开发Spring配置文件中使用的标签。 扩展的配置机制在附录B,扩展的XML认证一章中有详细介绍。 2.3
面向切面编程(
AOP
) Spring2.0提供了AOP支持。Spring的AOP框架很便于在XML文件中配置,并且配置也不复杂、冗长;并且Spring2.0集成了AspectJ pointcut语言和AspectJ切面申明类型。 2.3.1
方便的
AOP XML
配置 结合规则的Java对象的使用,Spring2.0提供了新的Schema支持来定义aspects。该特性利用了AspectJ pointcut语言,并且提供了完全类型的advice。具体细节可参照6.3章,“基于Schema的AOP支持”。 2.3.2
支持
@AspectJ aspects Spring2.0也支持@AspectJ定义的aspects。这些切面可以在AspectJ和Spring AOP之间共享,但同时只要求很简单的配置。细节在6.2章,“@AspectJ支持”中有详细描述。 2.4
中间层 2.4.1
便捷的基于
XML
的事务管理配置 在Spring2.0中,对于事务管理的配置方式已经发生了重大的改变。1.2.x版本的配置方式依然被支持,但新的配置方式相比更简单,也是我们建议的配置方式。Spring2.0也包含了AspectJ的链接库,这使得你几乎可以事务化任何对象,甚至包括那些并不是由Spring IoC容器创建的对象。 第9章,“事务管理”详细描述了这部分内容。 2.4.2
JPA Spring2.0包含了JPA抽象层,在使用方式上类似于Spring的JDBC抽象层。 如果你想要把JPA作为你的持久层的底层实现的话,第12.6章,JPA,详细描述了Spring中如何使用JPA。 2.4.3
异步的
JMS Spring2.0之前,Spring的JMS仅限于支持消息发送和同步的消息接收。这个功能(封装在JmsTemplate类中)是十分重要的,但是它并没有实现对于异步消息接收的支持。 Spring2.0现在完全实现了异步方式的消息接收机制,细节请参照第19.4.2章,“异步接收-消息驱动的POJOs”。 2.4.4
JDBC 在Spring框架的JDBC库中,包含了一些很小的类(但值得一提)。第一个,“NamedParameterJdbcTemplate”类,相比原来的使用站位符(?)来描述JDBC申明的方式,它提供了基于命名参数的方式来描述JDBC申明。 另外一个类是SimpleJdbcTemplate,在开发Java5(Tiger)的应用时,可以更方便的使用类JdbcTemplate。 2.5 Web
表现层 Web表现层在Spring2.0中作了充分的优化和扩展。 2.5.1
Spring MVC
的窗体标签库 Spring MVC的丰富的JSP标签库支持在JIRA(基于J2EE的开源问题跟踪系统)中,获得了Spring用户做多的票数。 Spring2.0提供了丰富特性的JSP标签库,这使得你在使用Spring MVC的时候,可以很方便的创建JSP页面。Spring团队自信的认为这个标签库将会能够使那些在JIRA中为它投票的开发者们很满意。第13.9章,“使用Spring的窗体标签库”和附录E,“spring-form.dtd”提供了详细的描述。 2.5.2
Spring MVC
的默认配置 对于许多项目工程来说,依据惯例形成默认的配置信息是十分必要的。目前Spring MVC对于“默认配置”(convention-over-configuration)提供了有力的支持。这意味着,如果你为你的Controller和views建立了一套命名规则的话,你就可以大量的减少用来完成处理映射,视图解析和ModelAndView实例的XML配置内容。这点对于需要进行快速原型开发的项目来说是个巨大的好处,同时也可以保持代码的一致性。Spring MVC的“默认配置”的详细内容请参考第13.11,“默认配置”(Convention over configuration)。 2.5.3
P
ortlet
框架 Spring2.0包含了一个叫做“Portlet”的框架,有点类似于Spring的MVC框架。关于它的细节可以在第16章,Portlet MVC框架中查找。 2.6
补充 下面的内容简述了包含在Spring2.0中的其他的一些新的特性和功能。 2.6.1
动态语言支持 Spring2.0目前支持的beans书写语言,除了Java之外,还包括动态语言,如JRuby,Groovy和BeanShell。细节可参阅第24章,动态语言支持。 2.6.2
JMX Spring框架目前提供了对于Notifications的支持;基于MBeanServer,它提供了对于MBeans的注册行为进行控制的可能。 参考:第20.7章,“Notifications” 第20.2.5章,“控制注册行为” 2.6.3
任务调度 Spring2.0对于任务调度提供了抽象。感兴趣的开发者可以参考第23.4章,“Spring任务执行抽象”。 2.6.4
Java5
(
Tiger
)支持 如果你在使用Java5(Tiger)开发项目,那么现在告诉你Spring2.0对Tiger提供了相当的支持。下面是对Java5的详细支持细节。 第9.5.8章,“使用AspectJ的@Transactional” 第6.8.1章,“结合AspectJ使用依赖注射的业务对象” 第6.2章,“@AspectJ支持” 第25.3.1章,“@Required” 第11.2.3章,“SimpleJdbcTemplate” 2.7
迁移到
Spring2.0 最后介绍一下从Spring1.2.x迁移到Spring2.0时可能出现的一些问题。 从Spring1.2迁移到Spring2.0“应该”是简单的将Spring2.0的jar文件放到你应用的合适的目录就可以了。 注意这里用的关键字是“应该”。无论升级是无缝的,还是依赖于你在代码中使用了多少的Spring API。Spring2.0几乎移除了所有在Spring1.2.x中的类和方法,当然,你得使用代替的类和方法(下面总结了一些)。 说到配置,Spring1.2.x的XML配置方式100%和Spring2.0兼容。当然,如果你仍然使用Spring1.2.x的DTD,那么你不能使用Spring2.0中的一些新功能(如scopes、便捷的AOP和事务配置),但也不会有什么其他影响。 推荐的迁移策略是,你最好先将Spring2.0的jar放到应用目录,这样可以获得在新版本中的一些优化的代码支持(bug修正、优化等)。然后,你可以逐步的选择使用Spring2.0的新特性和配置。例如,你可以选择以Spring2.0方式来配置你的aspect,实际上,在你最终的配置信息中包含90%的1.2.x和10%的Spring2.0配置方式是完全合法的。记住,Spring2.0并不强迫你完全将你的XML配置信息变成Spring2.0方式的。 2.7.1
变更 要了解变更的详细情况,请参考Spring2.0目录的changelog.txt文件。 2.7.1
.1 Jar
打包 Spring2.0打包方式已经完全不同于Spring1.2.x。现在JDO单独打包,Hibernate打包了2/3,包括ORM:目前的版本中它们不再被捆绑在spring.jar中。 2.7.1
.2 XML
配置 相比以前版本,Spring2.0发布了更多的XSDs来描述Spring的XML元数据(metadata)格式。 旧的DTD仍然支持,但如果可能你最好在你的Bean定义文件的头部包含对于这些XSD文件的引用。 另外一个重点的变更是关于Bean范围的定义方式。如果你使用Spring1.2DTD,那么你仍然可以使用‘singleton’属性。同时,你可以引用Spring2.0DTD,这不允许你使用‘singleton’属性,但你可以使用‘scope’属性来定义bean的生命周期范围。 2.7.1
.3
去除的类和方法 在以前版本中标示为“@deprecated”的许多类和方法在Spring2.0中已经被移除。Spring2.0团队决定建立一个新的代码基线,并且更完全的移除那些该移除的东西,而不是像以前那样总是在代码中若隐若现的出现。 下面的类和接口在Spring2.0中已经完全移除: lResultReader:用RowMapper代替 lBeanReferenceFactoryBean:用别名机制代替 lBeanDefinitionRegistryBuilder:用BeanDefinitionReaderUtils的默认方法代替 lBeanFactoryBootstrap:考虑使用BeanFactoryLocator或者一个定制的bootstrap类代替 lRequestUtils:用ServletRequestUtils代替 2.7.1
.4 Apache OJB 注意对于Apache OJB的支持在Spring框架中已经移除,但Apache OJB的链接库仍然可以使用,你可以在 Spring Modules
项目中找到它。 2.7.1
.5 iBatis 对于iBatis SQL Maps1.3版本的支持已经完全移除。请升级到iBatis SQL Maps 2.0/2.1。 2.8
最新的例子应用 有大量的例子应用来展示Spring2.0的新特性,你可以慢慢研究它们。你可以在Spring(spring-with-dependecies.[zip|tar.gz])的Samples目录找到它们。 此外,还包括大量的号称展示(showcase)应用。每个展示应用关注Spring2.0的某个新的特性方面。你可以研究这些例子应用的代码,不必每次都去创建一个新的Spring2.0应用。经过考虑,在这些例子中可能故意忽略了一些内容;如业务模型可能只由1到2个类组成,而其中的安全和事务管理部分内容可能被忽略了。 2.9
优化的文档 Spring参考手册已经针对2.0版本的新特性作了完全的更新。 然而,经过作了很多努力尽量避免在文档中出现错误,但仍然可能会出现错误。如果你发现了任何错误,并且你有一些时间的话,请将错误发布的 rasing an issue。 最后,为Arthur Loder在Spring框架参考手册和Javadocs资料的校对工作上所作的不知疲倦的努力表示特别的感谢!
推荐阅读