Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——注解、脚本、任务、MVC等其他特性改进
从Spring4开始,Spring以Servlet3为进行开发,如果用Spring MVC 测试框架的话需要指定Servlet3兼容的jar包(因为其Mock的对象都是基于Servlet3的)。另外为了方便Rest开发,通过新的@RestController指定在控制器上,这样就不需要在每个@RequestMapping方法上加 @ResponseBody了。而且添加了一个
AsyncRestTemplate
,支持REST客户端的异步无阻塞支持。
1、@RestController
@RestController public class UserController { private UserService userService; @Autowired public UserController(UserService userService) { this.userService = userService; } @RequestMapping("/test") public User view() { User user = new User(); user.setId(1L); user.setName("haha"); return user; } @RequestMapping("/test2") public String view2() { return "{\"id\" : 1}"; } }
其实现就是在@@RestController中加入@ResponseBody:
@org.springframework.stereotype.Controller @org.springframework.web.bind.annotation.ResponseBody public @interface RestController { }
这样当你开发Rest服务器端的时候,spring-mvc配置文件需要的代码极少,可能就仅需如下一行:
<context:component-scan base-package="com.sishuok.spring4"/> <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
@RestController public class UserController { private UserService userService; @Autowired public UserController(UserService userService) { this.userService = userService; } @RequestMapping("/api") public Callable<User> api() { System.out.println("=====hello"); return new Callable<User>() { @Override public User call() throws Exception { Thread.sleep(10L * 1000); //暂停两秒 User user = new User(); user.setId(1L); user.setName("haha"); return user; } }; } }
非常简单,服务器端暂停10秒再返回结果(但是服务器也是非阻塞的)。具体参考我github上的代码。
3.2、客户端
public static void main(String[] args) { AsyncRestTemplate template = new AsyncRestTemplate(); //调用完后立即返回(没有阻塞) ListenableFuture<ResponseEntity<User>> future = template.getForEntity("http://localhost:9080/spring4/api", User.class); //设置异步回调 future.addCallback(new ListenableFutureCallback<ResponseEntity<User>>() { @Override public void onSuccess(ResponseEntity<User> result) { System.out.println("======client get result : " + result.getBody()); } @Override public void onFailure(Throwable t) { System.out.println("======client failure : " + t); } }); System.out.println("==no wait"); }
此处使用Future来完成非阻塞,这样的话我们也需要给它一个回调接口来拿结果; Future和Callable是一对,一个消费结果,一个产生结果。调用完模板后会立即返回,不会阻塞;有结果时会调用其回调。
AsyncRestTemplate默认使用SimpleClientHttpRequestFactory,即通过java.net.HttpURLConnection实现;另外我们也可以使用apache的http components;使用template.setAsyncRequestFactory(new HttpComponentsAsyncClientHttpRequestFactory());设置即可。
另外在开发时尽量不要自己注册如:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
尽量使用
<mvc:annotation-driven/>
它设计的已经足够好,使用子元素可以配置我们需要的配置。
且不要使用老版本的:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
否则可能得到如下异常:
相关推荐
在Spring4.x版本中,框架引入了更多的新特性,如对Java 8的支持、WebSocket集成、反应式编程模型的Spring Reactor等,这些都极大地增强了Spring的灵活性和适用性。 在企业应用开发中,Spring框架的主要知识点包括:...
《Spring开发指南——中文版》是由夏昕编著的一本针对Spring框架的中文教程,旨在帮助开发者更好地理解和应用Spring框架。Spring是Java平台上的一个核心框架,广泛应用于企业级应用开发,提供了一种全面的编程和配置...
总的来说,Webx是一个综合性的Java Web开发框架,它通过层次化的设计和资源管理,为开发者提供了一个成熟的、可扩展的开发平台。Webx不仅可以用于快速搭建Web应用,还支持通过定制和扩展来满足特定项目的需求。Webx...
总结来说,Spring4在Web开发领域带来了许多增强,如@RestController注解简化RESTful服务的创建,AsyncRestTemplate实现客户端异步请求,WebSocket支持,MVC层的改进,以及对Java 8特性的良好支持等。这些改进极大地...
【JAVA初级教程——Web系统开发技术与方法】涵盖了Web编程的多个核心领域,旨在帮助初学者建立起完整的Web系统开发知识体系。以下是对每个知识点的详细解释: 1. **Web编程基本知识**: - **HTML**是超文本标记...
pring 4.0是Spring在积蓄4年后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域*开源平台的翘楚地位。Spring 4.0引入了众多Java开发者翘首以盼的基于Groovy Bean的配置、HTML 5/WebSocket支持等新功能...
二、Spring Web 3.1.1.RELEASE新特性 在3.1.1.RELEASE版本中,Spring Web模块引入了以下关键改进和特性: 1. 改进的类型安全的HTTP消息转换:通过`HttpMessageConverter`,Spring支持多种格式的数据交换,如JSON、...
Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...
在深入体验Java Web开发的过程中,我们常常需要掌握其核心基础以及高级特性,这些知识点对于成为一名优秀的Java Web开发者至关重要。本文将结合"深入体验Java Web开发内幕"的主题,详细阐述一些关键的技术点,并提及...
在Java Web开发领域,Spring框架以其强大的依赖注入和面向切面编程能力,以及丰富的模块支持,成为了广大开发者青睐的框架。而Struts作为经典的MVC框架,长期以来也占据着重要的地位。当两者结合时,可以构建出高效...
Spring Web框架是Java Web开发中的重要组成部分,它为构建高效、灵活的Web应用程序提供了强大支持。在本文中,我们将深入探讨Spring Web框架的3.0.0.RC3版本,以及该版本中的核心组件和关键特性。 一、Spring框架...
REST风格的Web编程模型为Web服务提供了全新的开发模式,降低了Web开发的复杂度,增强了API的可读性和可维护性。 本书的前身是《精通Spring2.x——企业应用开发详解》,经过一年的改版和调整,内容已经与Spring 3.0...
Spring2.0版本在当时是一个重要的里程碑,引入了许多新特性和改进,极大地增强了其灵活性和可扩展性。以下是对这两个文档——"Spring2.0参考手册(中文).pdf"和"Spring开发指南中文.pdf"中关键知识点的详细解读。 ...
Spring 3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java Web应用开发的难度,同时有效提升...
Spring 3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java Web应用开发的难度,同时有效提升...
Spring 3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java Web应用开发的难度,同时有效提升...
Spring 3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java Web应用开发的难度,同时有效提升...
Spring 3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java Web应用开发的难度,同时有效提升...
Spring 3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java Web应用开发的难度,同时有效提升...