一、首先,模块的组织更加的细致,从那么多的
jar
分包就看的出来:
Spring
的构建系统以及依赖管理使用的是
Apache Ivy
,从源码包看出,也使用了
Maven
。
Maven
确实是个好东西,好处不再多言,以后希望能进一步用好它。
二、新特性如下:
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
(嵌入式数据库的支持)
三、针对
Java 5
的核心
API
升级
1
、
BeanFactory
接口尽可能返回明确的
bean
实例,例如:
T getBean(String name, Class requiredType)
Map getBeansOfType(Class type)
Spring3
对泛型的支持,又进了一步。个人建议泛型应该多用,有百利而无一害!
2
、
Spring
的
TaskExecutor
接口现在继承自
java.util.concurrent.Executor
:
扩展的子接口
AsyncTaskExecutor
支持标准的具有返回结果
Futures
的
Callables
。
任务计划,个人还是更喜欢
Quartz
。
3
、新的基于
Java5
的
API
和
SPI
转换器
无状态的
ConversionService
和
Converters
取代标准的
JDK PropertyEditors
类型化的
ApplicationListener
,这是一个实现
“
观察者设计模式
”
使用的事件监听器。
基于事件的编程模式,好处多多,在项目中应该考虑使用,基于事件、状态迁移的设计思路,有助于理清软件流程,和减少项目的耦合度。
四、
Spring
表达式语言
Spring
表达式语言是一种从语法上和统一表达式语言(
Unified EL
)相类似的语言,但提供更多的重要功能。
它可以在基于
XML
配置文件和基于注解的
bean
配置中使用,并作为基础为跨
Spring portfolio
平台使用表达式语言提供支持。
接下来,是一个表达式语言如何用于配置一个数据库安装中的属性的示例:
<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 voidsetKeyGenerator(KeyGenerator kg) { … }
} http://storm0912.iteye.com/admin/blogs/new
又多一种表达式语言,造轮子的运动还在继续中!
五、基于
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);
}
}
为了让这段代码开始生效,我们需要添加如下组件扫描入口到最小化的应用程序上下文配置文件中:
<context:component-scan base-package="org.example.config"/> <util:properties id="jdbcProperties" location="classpath:org/example/config/jdbc.properties"/>
六、在组件中定义
bean
的元数据
感觉
Spring
提供了越来越多的注解、元数据,复杂性已经超出了当初带来的方便本身!
七、通用类型转换系统和
UI
字段格式化系统
Spring3
加入了一个通用的类型转换系统,目前它被
SpEL
用作类型转换,并且可能被一个
Spring
容器使用,用于当绑定
bean
的属性值的时候进行类型转换。
另外,还增加了一个
UI
字段格式化系统,它提供了更简单的使用并且更强大的功能以替代
UI
环境下的
JavaBean
的
PropertyEditors
,例如在
SpringMVC
中。
这个特性要好好研究下,通用类型转换系统如果果如所言的话,带来的好处还是很多的。
八、数据层
对象到
XML
的映射功能已经从
Spring Web Services
项目移到了
Spring
框架核心中。它位于
org.springframework.oxm
包中。
OXM?
研究下!时间真不够!
九、
Web
层
在
Web
层最激动人心的新特性莫过于新增的对构件
REST
风格的
web
服务和
web
应用的支持!另外,还新增加了一些任何
web
应用都可以使用的新的注解。
服务端对于
REST
风格的支持,是通过扩展既有的注解驱动的
MVC web
框架实现的。
客户端的支持则是
RestTemplate
类提供的。
无论服务端还是客户端
REST
功能,都是使用
HttpConverter
来简化对
HTTP
请求和应答过程中的对象到表现层的转换过程。
MarshallingHttpMessageConverter
使用了上面提到的
“
对象到
XML
的映射机制
”
。
十、
@MVC
增强
新增了诸如
@CookieValue
和
@RequestHeaders
这样的注解等。
十一、声明式模型验证
支持
JSR 303
,使用
Hibernate Validator
作为实现。
十二、提前对
Java EE6
提供支持
提供了使用
@Async
注解对于异步方法调用的支持(或者
EJB 3.1
里的
@Asynchronous
)
另外,新增对
JSR 303, JSF 2.0, JPA 2.0
等的支持。
十三、嵌入式数据库的支持
对于嵌入式的
Java
数据库引擎提供了广泛而方便的支持,诸如
HSQL, H2,
以及
Derby
等。
这是不是代表一种潮流呢?数据库向越来越小型化发展,甚至小型化到嵌入式了,我认为这在桌面级应用上还是很有市场的。