Spring4.0给我们带来什么?

[size=large][b]JDK8[/b][/size]
对JDK8的支持,这个目前来说还是探索性质,毕竟Java 8自己都还没有GA,而且应该没有公司会在目前的情况下使用JDK8做产品开发。因此,暂时可忽略。

[size=large][b]Groovy Bean Definition DSL[/b][/size]
即可以通过Groovy class来配置Bean,以及Bean之间的相互依赖,即Spring2时代推出的xml配置,Spring3推出的Annotation配置,Spring4为配置方式又增添了一位新成员Groovy DSL。举个栗子:

import org.hibernate.SessionFactory
import org.apache.commons.dbcp.BasicDataSource

beans {
dataSource(BasicDataSource) {
driverClassName = "org.hsqldb.jdbcDriver"
url = "jdbc:hsqldb:mem:grailsDB"
username = "sa"
password = ""
settings = [mynew:"setting"]
}
sessionFactory(SessionFactory) {
dataSource = dataSource
}
myService(MyService) {
nestedBean = { AnotherBean bean ->
dataSource = dataSource
}
}
}
DSL配置在概念上和其他配置方式是一样的,只是提供了一种更简洁的语法,这个方式的实现得益于Grails的BeanBuilder,所有支持的DSL语法也来自于这儿:[url]http://grails.org/doc/latest/guide/spring.html#theBeanBuilderDSLExplained[/url], 如果你想追踪这个想法的起源,可以看看这篇文章:[url]http://spring.io/blog/2007/11/29/spring-dynamic-language-support-and-a-groovy-dsl/[/url] 另外,这儿有一篇非常好的文章详细描述了如何使用该特性:[url]http://jinnianshilongnian.iteye.com/blog/1991830[/url]。总的来说, 个人觉得使用DSL的配置方式,就像Build工具界的Gradle之于Maven,它极大的灵活了Spring的配置文件,可以通过groovy脚本实现非常复杂的Bean定义和依赖关系,甚至玩出很多魔幻语法,但与之对应的是, 我们是否应该在配置文件里面玩那么复杂?不过,多一个选择总是好的,让大家有得挑。

[size=large][b]核心容器功能的改进[/b][/size]
这部分是应该是当前Spring用户最关注点:

[list]
[*]支持泛型依赖注入,即对自动注入依赖的识别扩展到了泛型的类,以前,如果有GenericInterface<A>, GenericInterface<B>两个Bean时,当想注入GenericInterface<A>依赖时, 容器是无法识别的,你需要使用@Qualifier指定具体的bean id,Spring4.0中则可以直接找到对应的Bean。这个特性对程序员的好处,请查看这篇文章:[url]http://jinnianshilongnian.iteye.com/blog/1989330[/url]
[*]使用meta-annoation方式定义Annotation时, 该Annotation可以访问源Annotation的部分属性,以更加方便的定制自己想要的Annotation。
[*]Bean依赖注入到Map和List,Array中, 即提供了一种方式获取到某个类型的所有Bean,当注入到Map中时, Key为Bean的名字,value为Bean实例。
[/list]
 @Autowired
private MovieCatalog[] movieCatalogs;
….
@Autowired
private Set<MovieCatalog> movieCatalogs;
….
@Autowired
private Map<String, MovieCatalog> movieCatalogs;
如果,你对Bean在Array或List中的位置有特殊需求,Spring4.0还提供了@Order annotation和Ordered接口来定义Bean注入到Array/List中的顺序.

[list]
[*]扩展@Lazy annotation,除了延迟加载Bean,依赖注入也可以延迟了。
[*]提供了@Description annotation为Bean添加描述。
[*]增加了@Condition annotation, 使用该Annotation之后,在做依赖注入的时候,会检测是否满足某个条件,这样可以更灵活的决定注入的类,具体用法参见:[url]http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Conditional.html[/url],或者说这篇文章:[url]http://jinnianshilongnian.iteye.com/blog/1989379[/url]。
[*]基于CGLIB的代理类不在强制要求空参构造函数了,提供了一种“一旦注册,不许修改”的注入策略。
[/list]

[size=large][b]Web开发改进[/b][/size]
[list]
[*]增加了@RestController annotation, 就是把@Controller和@ReponseBody打包了,省得大家再去每个方法上加一个@ResponseBody了。
[*]新加了AsyncRestTemplate类,可以用来构建异步调用的Restful Client, 具体用法看这儿:[url]http://jinnianshilongnian.iteye.com/blog/1989381[/url],或者这儿:[url]http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#rest-async-resttemplate[/url]
[*]Spring4.0基于Servlet3.0+版本开发,尤其是Spring MVC的测试框架中的Mock都是基于Servlet3.0包中的一些类的,因此使用时必须把兼容Servlet 3.0的包添加到Classpath中。
[*]为Spring MVC应用增加了Timezone的支持,可以在RequestContext获取,设置TimeZone信息,Spring还提供Datetime的转换功能:[url]http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#mvc-timezone[/url]
[*]提供了 WebSocket, SockJS, and STOMP Messaging的支持,在一个Controller中,除了可以处理 @RequestMapping对应的Http请求,还可以处理对应@MessageMapping的WebSocket Client发来的Message请求,哪些不支持WebSocket的浏览器,Spring4.0提供了基于SockJS协议的Message处理,即你可以在浏览器基于SockJS协议模拟一个Web Socket的请求,Spring4.0也可以处理。具体的说明:[url]http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#websocket[/url]
[*]支持STOMP Message协议
[/list]

[size=large][b]测试框架改进[/b][/size]
[list]
[*]几乎所有spring-test模块下的annotation(比方说:@ContextConfiguration, @WebAppConfiguration, @ContextHierarchy, @ActiveProfiles)都可以做元annoation, 这样开发者就可以更方便得定制自己的annotation,以增强代码表现力和减少多个Test之间的重复代码。
[*]增加了一种更灵活的ActiveProfiles的决定方式,定制一个ActiveProfilesResolver并把它设置到@ActiveProfiles的resolver属性上。
[*]添加了SocketUtils类帮忙扫描本地机器上的可用Socket端口,当需要在本地起一个mock server时这个功能非常实用。
[*]org.springframework.mock.web包下的Mock类都与Servlet 3.0兼容了
[/list]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值