突然间想知道spring2.0到2.5 再到3.0的变化,就到网上搜索一下。方便查看而已
2.5的新特性
Spring2.5rc1发布了,一直想知道它葫芦里卖什么药,如下是文档里的change.log
- 1. JDK版本: JDK至少要1.4.2以上,若是仍然打算使用1.3的话就请用2.0.6/2.0.7版本吧。
- 2. Jar包:SpringMVC 再也不使用spring.jar 这个庞大的包了。 Spring-webmvc.jar, spring-webmvc-portlet.jar 能够在 lib/modules 目录下找到,并且对于Struts1.* 的支持的包也应该改为 spring-webmvc-struts.jar了。
- 3. XML配置:推荐使用XML metadata格式,不过先前的DTD仍然支持。须要注意的一点是,Spring1.2的DTD继续使用“singleton”属性,可是新的Spring2.0 DTD不容许使用“singleton”属性了,改为“scope”属性来描述bean的生命周期。
- 4. 废弃的类与方法:有些在先前版本标注过“@deprecated”的类与方法已经彻底被废弃了。
- 好比:
- ResultReader : 被 RowMapper 接口取代。
- BeanFactoryBootstrap : 考虑使用 BeanFactoryLocator 或自定义的bootstrap类来代替。
- 5. Apache OJB:注意Spring源代码中已经彻底把这个去掉了,但与之整合的类仍然能够在Spring Modules project找到。https://springmodules.dev.java.net/
- 6. iBATIS:注意Spring已经再也不支持iBATIS 的1.3版本了, 若是想继续的话,请升级到2.3以上吧。
- 7. Hibernate:注意Spring已经再也不支持Hibernate 3.1以前的版本了,也就是说2.1,3.0的版本也没法使用了。若是仍然要用的话,推荐使用Spring的2.0.6/2.0.7版本。
- 8. JDO:注意Spring已经不支持JDO1.0了。一样,你能够升级到2.0以上版本,或者使用Spring的2.0.6/2.0.7版本。
- 9. UrlFilenameViewController :这个东东我也没有接触过,这里,我就简单翻译一下吧。
- “考虑到嵌套路径的请求,视图名称如今决定叫UrlFilenameViewController了,这是一个突破性的改变,而且意味着若是你从Spring1.* 升级到Spring2.0 你可使用该类从而减小Spring Web MVC的配置工做。”
你们在使用新版本以前请先注意这些改变,也许对您的系统来讲,是很重要的。
spring3.0特性
1、首先,模块的组织更加的细致,从那么多的jar分包就看的出来:
Spring的构建系统以及依赖管理使用的是Apache Ivy,从源码包看出,也使用了Maven。
Maven确实是个好东西,好处再也不多言,之后但愿能进一步用好它。
2、新特性以下:
Spring Expression Language (Spring表达式语言)
IoC enhancements/Java based bean metadata (Ioc加强/基于Java的bean元数据)
General-purpose type conversion system and UI field formatting system (通用类型转换系统和UI字段格式化系统)
Object to XML mapping functionality (OXM) moved from Spring Web Services project (对象到XML映射功能从Spring Web Services项目移出)
Comprehensive REST support (普遍的REST支持)
@MVC additions (@MVC加强)
Declarative model validation (声明式模型验证)
Early support for Java EE 6 (提早对Java EE6提供支持)
Embedded database support (嵌入式数据库的支持)
3、针对Java 5的核心API升级
- 一、BeanFactory接口尽量返回明确的bean实例,例如:
-
- T getBean(String name, Class requiredType)
-
- Map getBeansOfType(Class type)
-
- Spring3对泛型的支持,又进了一步。我的建议泛型应该多用,有百利而无一害!
-
- 二、Spring的TaskExecutor接口如今继承自java.util.concurrent.Executor:
-
- 扩展的子接口AsyncTaskExecutor支持标准的具备返回结果Futures的Callables。
-
- 任务计划,我的仍是更喜欢Quartz。
-
- 三、新的基于Java5的API和SPI转换器
无状态的ConversionService 和 Converters
取代标准的JDK PropertyEditors
类型化的ApplicationListener,这是一个实现“观察者设计模式”使用的事件监听器。
基于事件的编程模式,好处多多,在项目中应该考虑使用,基于事件、状态迁移的设计思路,有助于理清软件流程,和减小项目的耦合度。
4、Spring表达式语言
Spring表达式语言是一种从语法上和统一表达式语言(Unified EL)相相似的语言,但提供更多的重要功能。它能够在基于XML配置文件和基于注解的bean配置中使用,并做为基础为跨Spring portfolio平台使用表达式语言提供支持。
接下来,是一个表达式语言如何用于配置一个数据库安装中的属性的示例:
value="#{systemProperties.databaseName}"/>
value="#{strategyBean.databaseKeyGenerator}"/>
若是你更愿意使用注解来配置你的组件,那么这种功能一样可用:
@Repository public class RewardsTestDatabase {
@Value("#{systemProperties.databaseName}")
public void setDatabaseName(String dbName) { … }
@Value("#{strategyBean.databaseKeyGenerator}")
public voidsetKeyGenerator(KeyGenerator kg) { … }
}
又多一种表达式语言,造轮子的运动还在继续中!
5、基于Java的bean元数据
JavaConfig项目中的一些核心特性已经集成到了Spring中来,这意味着以下这些特性如今已经可用了:
@Configuration
@Bean
@DependsOn
@Primary
@Lazy
@Import
@Value
又来一堆的注解,无语了,感受仍是配置文件方便!:(
这儿有一个例子,关于一个Java类如何使用新的JavaConfig特性提供基础的配置信息:
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);
}
}
为了让这段代码开始生效,咱们须要添加以下组件扫描入口到最小化的应用程序上下文配置文件中:
6、在组件中定义bean的元数据
感受Spring提供了愈来愈多的注解、元数据,复杂性已经超出了当初带来的方便自己!
7、通用类型转换系统和UI字段格式化系统
Spring3加入了一个通用的类型转换系统,目前它被SpEL用做类型转换,而且可能被一个Spring容器使用,用于当绑定bean的属性值的时候进行类型转换。
另外,还增长了一个UI字段格式化系统,它提供了更简单的使用而且更强大的功能以替代UI环境下的JavaBean的PropertyEditors,例如在SpringMVC中。
这个特性要好好研究下,通用类型转换系统若是果如所言的话,带来的好处仍是不少的。
8、数据层
对象到XML的映射功能已经从Spring Web Services项目移到了Spring框架核心中。它位于org.springframework.oxm包中。
OXM?研究下!时间真不够!
9、Web层
在Web层最激动人心的新特性莫过于新增的对构件REST风格的web服务和web应用的支持!另外,还新增长了一些任何web应用均可以使用的新的注解。
服务端对于REST风格的支持,是经过扩展既有的注解驱动的MVC web框架实现的。
客户端的支持则是RestTemplate类提供的。
不管服务端仍是客户端REST功能,都是使用HttpConverter来简化对HTTP请求和应答过程当中的对象到表现层的转换过程。
MarshallingHttpMessageConverter使用了上面提到的“对象到XML的映射机制”。
10、@MVC加强
新增了诸如@CookieValue 和 @RequestHeaders这样的注解等。
11、声明式模型验证
支持JSR 303,使用Hibernate Validator做为实现。
12、提早对Java EE6提供支持
提供了使用@Async注解对于异步方法调用的支持(或者EJB 3.1里的 @Asynchronous)
另外,新增对JSR 303, JSF 2.0, JPA 2.0等的支持。
十3、嵌入式数据库的支持
对于嵌入式的Java数据库引擎提供了普遍而方便的支持,诸如HSQL, H2, 以及Derby等。
这是否是表明一种潮流呢?数据库向愈来愈小型化发展,甚至小型化到嵌入式了,我认为这在桌面级应用上仍是颇有市场的。
已有 0 人发表留言,猛击->>这里<<-参与讨论
JavaEye推荐