Spring 4.0新特性------Web开发的增强


一、@RestController

为了方便Rest开发,通过新的@RestController指定在控制器上,这样就不需要在每个@RequestMapping方法上加@ResponseBody了。而且添加了一个AsyncRstTemplate,支持REST客户端的异步无阻塞支持。

@RestController  
public class UserController {  
    private UserService userService;  
    @Autowired  
    public UserController(UserService userService) {  
        this.userService = userService;  
    }  
    @RequestMapping("/login")  
      public User view() {  
        User user = new User();  
        user.setId(1L);  
        user.setName("haha");  
        return user;  
    }  
  
    @RequestMapping("/test2")  
    public String view2() {  
        return "{\"name\" : pudge}";  
    }  
}  
这样当你开发Rest服务器端的时候,spring-mvc只需要简单的配置一下,如下:

<context:component-scan base-package="com.hwj.spring4"/>  
<mvc:annotation-driven/>  



二、mvc:annotation-driven配置变化

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



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


3.1、服务器端

非常简单,服务器端暂停10秒再返回结果(但是服务器也是非阻塞的)。

@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;  
            }  
        };  
    }  
}  


3.2、客户端

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


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


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");  
}  







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值