文档章节

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

张升强
 张升强
发布于 2014/04/02 15:46
字数 785
阅读 89
收藏 4
点赞 1
评论 0

Spring4新特性——泛型限定式依赖注入

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

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

Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC 

Spring4新特性——Groovy Bean定义DSL

Spring4新特性——更好的Java泛型操作API 

Spring4新特性——JSR310日期API的支持

Spring4新特性——注解、脚本、任务、MVC等其他特性改进 

 

从Spring4开始,Spring以Servlet3为进行开发,如果用Spring MVC 测试框架的话需要指定Servlet3兼容的jar包(因为其Mock的对象都是基于Servlet3的)。另外为了方便Rest开发,通过新的@RestController指定在控制器上,这样就不需要在每个@RequestMapping方法上加 @ResponseBody了。而且添加了一个AsyncRestTemplate ,支持REST客户端的异步无阻塞支持。

 

1、@RestController

Java代码   收藏代码
  1. @RestController  
  2. public class UserController {  
  3.     private UserService userService;  
  4.     @Autowired  
  5.     public UserController(UserService userService) {  
  6.         this.userService = userService;  
  7.     }  
  8.     @RequestMapping("/test")  
  9.       public User view() {  
  10.         User user = new User();  
  11.         user.setId(1L);  
  12.         user.setName("haha");  
  13.         return user;  
  14.     }  
  15.   
  16.     @RequestMapping("/test2")  
  17.     public String view2() {  
  18.         return "{\"id\" : 1}";  
  19.     }  
  20. }  

 其实现就是在@@RestController中加入@ResponseBody:

Java代码   收藏代码
  1. @org.springframework.stereotype.Controller  
  2. @org.springframework.web.bind.annotation.ResponseBody  
  3. public @interface RestController {  
  4. }  

这样当你开发Rest服务器端的时候,spring-mvc配置文件需要的代码极少,可能就仅需如下一行:

Java代码   收藏代码
  1. <context:component-scan base-package="com.sishuok.spring4"/>  
  2. <mvc:annotation-driven/>  

  

2、mvc:annotation-driven配置变化

统一风格;将 enableMatrixVariables改为enable-matrix-variables属性;将ignoreDefaultModelOnRedirect改为ignore-default-model-on-redirect。

 

3、提供AsyncRestTemplate用于客户端非阻塞异步支持。

3.1、服务器端

对于服务器端的springmvc开发可以参考https://github.com/zhangkaitao/servlet3-showcase中的chapter3-springmvc

Java代码   收藏代码
  1. @RestController  
  2. public class UserController {  
  3.     private UserService userService;  
  4.     @Autowired  
  5.     public UserController(UserService userService) {  
  6.         this.userService = userService;  
  7.     }  
  8.     @RequestMapping("/api")  
  9.       public Callable<User> api() {  
  10.         System.out.println("=====hello");  
  11.         return new Callable<User>() {  
  12.             @Override  
  13.             public User call() throws Exception {  
  14.                 Thread.sleep(10L * 1000); //暂停两秒  
  15.                 User user = new User();  
  16.                 user.setId(1L);  
  17.                 user.setName("haha");  
  18.                 return user;  
  19.             }  
  20.         };  
  21.     }  
  22. }  

非常简单,服务器端暂停10秒再返回结果(但是服务器也是非阻塞的)。具体参考我github上的代码。

 

3.2、客户端

Java代码   收藏代码
  1. public static void main(String[] args) {  
  2.     AsyncRestTemplate template = new AsyncRestTemplate();  
  3.     //调用完后立即返回(没有阻塞)  
  4.     ListenableFuture<ResponseEntity<User>> future = template.getForEntity("http://localhost:9080/spring4/api", User.class);  
  5.     //设置异步回调  
  6.     future.addCallback(new ListenableFutureCallback<ResponseEntity<User>>() {  
  7.         @Override  
  8.         public void onSuccess(ResponseEntity<User> result) {  
  9.             System.out.println("======client get result : " + result.getBody());  
  10.         }  
  11.   
  12.         @Override  
  13.         public void onFailure(Throwable t) {  
  14.             System.out.println("======client failure : " + t);  
  15.         }  
  16.     });  
  17.     System.out.println("==no wait");  
  18. }  

 此处使用Future来完成非阻塞,这样的话我们也需要给它一个回调接口来拿结果; Future和Callable是一对,一个消费结果,一个产生结果。调用完模板后会立即返回,不会阻塞;有结果时会调用其回调。

 

AsyncRestTemplate默认使用SimpleClientHttpRequestFactory,即通过java.net.HttpURLConnection实现;另外我们也可以使用apache的http components;使用template.setAsyncRequestFactory(new HttpComponentsAsyncClientHttpRequestFactory());设置即可。

 

另外在开发时尽量不要自己注册如:

Java代码   收藏代码
  1. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>  
  2. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">  

尽量使用

Java代码   收藏代码
  1. <mvc:annotation-driven/>   

它设计的已经足够好,使用子元素可以配置我们需要的配置。

  

且不要使用老版本的:

Java代码   收藏代码
  1. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>  
  2. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  

否则可能得到如下异常:

写道
Circular view path [login]: would dispatch back to the current handler URL [/spring4/login] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

© 著作权归作者所有

共有 人打赏支持
张升强
粉丝 38
博文 119
码字总数 154023
作品 0
广州
高级程序员
Spring4新特性——泛型限定式依赖注入

Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC Spring4新特性...

Big_BoBo
2013/12/26
0
0
5分钟构建spring web mvc REST风格HelloWorld

当然写本文的目的不是为了速度,只是表明现在构建一个Spring web mvc Rest风格的HelloWorld应用会很简单。不过如果看过Spring Boot这个项目,可能只需要最多3分钟就能构建一个简单的Rest风格...

黄金小猪2号
2014/01/07
4.1K
2
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC

Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC Spring4新特性...

咖啡杯
2014/02/18
0
0
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC

Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC Spring4新特性...

咖啡杯
2014/02/18
0
0
Spring4.1新特性——Spring MVC增强

1、GroovyWebApplicationContext 在Spring 4.1之前没有提供Web集成的ApplicationContext,在《Spring4新特性——Groovy Bean定义DSL》中我们自己去实现的com.sishuok.spring4.context.suppo...

莱茵河水怪v241Beta
2015/07/23
0
0
bean的属性校验

拓展阅读: Java如何实现判断一个对象的所有属性是否为空 springMVC介绍之spring validation Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC(系列) 7. Validation, Data Bin...

pandudu
2016/12/27
3
0
.NET Framework 4.6.2改进了WPF和安全性

.NET Framework的最新版本提供了若干以WPF和安全性为中心的新特性——包括对ClickOnce部署的应用程序进行了期待已久的改进。早在今年3月底,微软就发布了.NET Framework 4.6.2的预览版本。现...

鸟栖沙岩
2016/08/11
9
0
Opera 15 正式版发布

今天我们非常高兴,因为发布了 Windows 和 Mac 系统下的全新版本 —— Opera 15 正式版! 在该版本中我们更新了快速拨号,可使用文件夹方式来分组不同的网站,方便进行过滤;我们还引入了 Di...

oschina
2013/07/02
4.8K
37
Apache Solr:基于Lucene的可扩展集群搜索服务器

Solr Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出...

长平狐
2013/01/06
206
0
Spring+Mybatis+Velocity

前言 最近开始尝试使用久负盛名的SM框架——Spring+Mybatis进行Web开发,从此走上了Spring配置的不归路。说句实在话,Spring是我特么见过所有WEB工程里面最难配的,因为必须要对它那一套非侵...

langhsu
2015/12/16
191
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 路由实例解析

根据链路追踪图如上: 资料:https://istio.io/docs/guides/bookinfo/ 流程解析: 1. 访问地址: http://IP:31380/productpage kubectl get svc --all-namespaces -o wide istio-system isti......

xiaomin0322
9分钟前
2
0
Centos7通过yum安装jdk8

先查看系统是否已有自带的jdk rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没有输出信息,则说明系统没有安装。如果有输出信息,则执行下面的命令卸载 rpm -qa | grep jav...

iplusx
11分钟前
0
0
字体的动画

树不要皮必死无疑,人不要脸天下无敌。如果你此时正在被承受着不公平的待遇,不要伤心不要气馁,吃亏要趁早。 .menu ul li a { position:relative; color: #FFFFFF; text-decoration:...

Js_Mei
12分钟前
0
0
新手学习hadoop发行版本选择介绍

Hadoop对于从事互联网工作的朋友来说已经非常熟悉了,相信在我们身边有很多人正在转行从事hadoop开发的工作,理所当然也会有很多hadoop入门新手。Hadoop开发太过底层,技术难度远比我们想象的...

左手的倒影
12分钟前
0
0
iOS定时器循环引用问题解决

我们通常使用NSTimer或CADisplayLink会使用以下方式 //定义@property (nonatomic, strong)NSTimer *timer;//实现self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:p......

xiaobai1315
13分钟前
0
0
给wordpress程序提速

在上一节中,我们介绍了wordpress CMS主题提速,本节我们接着介绍wordpress主题提速:gravatar用户头像缓存和google字体去除。 gravatar头像受到全世界网络用户的喜爱,设置好gravatar头像后...

hero2019
15分钟前
0
0
DevExpress v18.1最新版帮助文档下载大全

DevExpress v18.1.4帮助文档下载列表大全来啦!包含.NET、VCL、HTML/JS系列所有帮助文档,提供CHM和PDF两个版本。除已停止更新的Silverlight、Windows 8外,其余均为最新版本。 文章底部扫描...

Miss_Hello_World
18分钟前
0
0
Unity Shader中各种空间及变换方法

前几天尝试写一个传送门的shader,发现自己对坐标之间的变换掌握的不够熟练,趁着这阵子想整理shader相关的知识点,先把各种空间及之间转换整理一下。 1 模型空间-世界空间-观察空间-裁剪空间...

爽歪歪ES
24分钟前
0
0

定义和应用 栈(stack)是一种特殊的线性表,其插入(也称入栈或压栈)和删除(也称出栈或弹栈)操作都在表的同一端进行。这一端被称为栈顶(top)另一端称为栈底端(bottom)。 我们生活中其实...

Frost729
26分钟前
0
0
数据分析挖掘学习干货:大数据处理技术的总结与分析

一 数据分析处理需求分类 1 事务型处理 在我们实际生活中,事务型数据处理需求非常常见,例如:淘宝网站交易系统、12306网站火车票交易系统、超市POS系统等都属于事务型数据处理系统。 这类系...

加米谷大数据
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部