Spring4.0给我们带来什么?

标签: spring4 | 发表时间:2013-12-22 17:13 | 作者:
出处:http://www.iteye.com
JDK8
对JDK8的支持,这个目前来说还是探索性质,毕竟Java 8自己都还没有GA,而且应该没有公司会在目前的情况下使用JDK8做产品开发。因此,暂时可忽略。

Groovy Bean Definition DSL
即可以通过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语法也来自于这儿: http://grails.org/doc/latest/guide/spring.html#theBeanBuilderDSLExplained, 如果你想追踪这个想法的起源,可以看看这篇文章: http://spring.io/blog/2007/11/29/spring-dynamic-language-support-and-a-groovy-dsl/ 另外,这儿有一篇非常好的文章详细描述了如何使用该特性: http://jinnianshilongnian.iteye.com/blog/1991830。总的来说, 个人觉得使用DSL的配置方式,就像Build工具界的Gradle之于Maven,它极大的灵活了Spring的配置文件,可以通过groovy脚本实现非常复杂的Bean定义和依赖关系,甚至玩出很多魔幻语法,但与之对应的是, 我们是否应该在配置文件里面玩那么复杂?不过,多一个选择总是好的,让大家有得挑。

核心容器功能的改进
这部分是应该是当前Spring用户最关注点:

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

 @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中的顺序.



Web开发改进


测试框架改进
  • 几乎所有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兼容了


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [spring4] 推荐:

【转】Spring4+Hibernate4+JBPM6

- - 研发管理 - ITeye博客
Eclipse的link方式安装JBPM6插件 http://blog.csdn.net/dcz1001/article/details/19905035. 安装JBPM6运行环境(JBPM6学习之二). 创建第一个JBPM6项目并且运行自带的helloword例子(JBPM6学习之三). Spring JBPM6整理例子代码: https://github.com/kylinsoong/jbpm-6-examples/tree/master/spring-integration.

Spring4新特性——Web开发的增强

- - ITeye博客
Spring4新特性——泛型限定式依赖注入. Spring4新特性——核心容器的其他改进. Spring4新特性——Web开发的增强. 从Spring4开始,Spring以Servlet3为进行开发,如果用Spring MVC 测试框架的话需要指定Servlet3兼容的jar包(因为其Mock的对象都是基于Servlet3的).

spring4+quartz2.x 动态定时任务

- - Java - 编程语言 - ITeye博客
         最近看quartz定时任务,看到博客园的一篇文章http://www.cnblogs.com/xrab/p/5850186.html( Spring整合Quartz实现动态定时器),他用的是spring3.0.7,quartz是1.8.6,而我用的是spring4.3.2和quartz2.2.1.

Spring4新特性——核心容器的其他改进

- - ITeye博客
接上一篇《 Spring4新特性——泛型限定式依赖注入》,接下来我们看看Spring4的其他改进. 这样会注入:key是bean名字;value就是所有实现了BaseService的Bean,假设使用上一篇的例子,则会得到:.  这样会注入所有实现了BaseService的Bean;但是顺序是不确定的,如果我们想要按照某个顺序获取;在Spring4中可以使用@Order或实现Ordered接口来实现,如:.