Spring4.0给我们带来什么?

来源:互联网 发布:java初学者看什么书比较好 编辑:程序博客网 时间:2024/04/29 17:20
JDK8 
对JDK8的支持,这个目前来说还是探索性质,毕竟Java 8自己都还没有GA,而且应该没有公司会在目前的情况下使用JDK8做产品开发。因此,暂时可忽略。 

Groovy Bean Definition DSL 
即可以通过Groovy class来配置Bean,以及Bean之间的相互依赖,即Spring2时代推出的xml配置,Spring3推出的Annotation配置,Spring4为配置方式又增添了一位新成员Groovy DSL。举个栗子: 
Java代码  收藏代码
  1. import org.hibernate.SessionFactory  
  2. import org.apache.commons.dbcp.BasicDataSource  
  3.   
  4. beans {  
  5.     dataSource(BasicDataSource) {  
  6.         driverClassName = "org.hsqldb.jdbcDriver"  
  7.         url = "jdbc:hsqldb:mem:grailsDB"  
  8.         username = "sa"  
  9.         password = ""  
  10.         settings = [mynew:"setting"]  
  11.     }  
  12.     sessionFactory(SessionFactory) {  
  13.         dataSource = dataSource  
  14.     }  
  15.     myService(MyService) {  
  16.         nestedBean = { AnotherBean bean ->  
  17.             dataSource = dataSource  
  18.         }  
  19.     }  
  20. }  
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实例。

Java代码  收藏代码
  1.  @Autowired  
  2. private MovieCatalog[] movieCatalogs;  
  3. ….  
  4. @Autowired  
  5. private Set<MovieCatalog> movieCatalogs;  
  6. ….  
  7. @Autowired  
  8. private Map<String, MovieCatalog> movieCatalogs;  
如果,你对Bean在Array或List中的位置有特殊需求,Spring4.0还提供了@Order annotation和Ordered接口来定义Bean注入到Array/List中的顺序. 

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


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


测试框架改进 
  • 几乎所有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兼容了
http://ningandjiao.iteye.com/blog/1993481
0 0
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 得痔疮发烧了怎么办啊 痔疮手术后肚子胀气怎么办 乙肝引起的发烧头痛怎么办 肠癌手术后吃了会胃疼怎么办 来月经肛门坠痛怎么办 总想排便还有血怎么办 闻了别人的口臭怎么办 有内痔肛门经常不舒服怎么办 做完肠镜肛门疼怎么办 3周宝宝得皮彦怎么办 痔疮有蚕豆大了怎么办 顺生肛门坠胀怎么办 生孩子痔疮脱出不能回纳怎么办 痔疮犯了屁眼疼怎么办 孕晚期得痔疮了怎么办 孕39周痔疮严重怎么办 顺产后长痔疮了怎么办 怀孕了犯痔疮了怎么办 怀孕了痔疮犯了怎么办 痔疮手术后肛裂怎么办 痔疮引起的肛裂怎么办 痔疮手术后伤口不愈合怎么办 痔疮手术后伤口痒怎么办 肛瘘手术十五天后伤口疼怎么办 leep刀后hpv还是阳性怎么办 结肠息肉钳除后怎么办 痔疮手术后排便困难怎么办 住院未结账跑了怎么办 来月经痔疮犯了怎么办 安保压不下宫缩怎么办 肛周脓肿术后假性愈合怎么办 肛门的皱褶肿了怎么办 1月婴儿排便困难怎么办 吃完辣的痔疮肿了怎么办 肛裂怎么办兰州来医博.相信 胎儿脐带绕颈一周怎么办 郑大一附院怎么办合作医疗 痔疮包不消怎么办很疼 痔疮内扎手术后直肠窄小怎么办 2个月大的宝宝鼻塞怎么办 宝宝鼻屎比较深怎么办