最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring4新特性之web開發(fā)增強(qiáng)

 更新時(shí)間:2017年09月15日 11:25:44   作者:動(dòng)力節(jié)點(diǎn)  
這篇文章主要介紹了spring4新特性之web開發(fā)增強(qiáng)的相關(guān)資料,需要的朋友可以參考下

從Spring4開始,Spring以Servlet3為進(jìn)行開發(fā),如果用Spring MVC 測試框架的話需要指定Servlet3兼容的jar包(因?yàn)槠銶ock的對(duì)象都是基于Servlet3的)。另外為了方便Rest開發(fā),通過新的@RestController指定在控制器上,這樣就不需要在每個(gè)@RequestMapping方法上加 @ResponseBody了。而且添加了一個(gè)AsyncRestTemplate ,支持REST客戶端的異步無阻塞支持。 

1、@RestController

Java代碼  

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

 其實(shí)現(xiàn)就是在@@RestController中加入@ResponseBody:

Java代碼 

@org.springframework.stereotype.Controller 
@org.springframework.web.bind.annotation.ResponseBod 
public @interface RestController { 
} 

這樣當(dāng)你開發(fā)Rest服務(wù)器端的時(shí)候,spring-mvc配置文件需要的代碼極少,可能就僅需如下一行:

Java代碼  

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

2、mvc:annotation-driven配置變化

統(tǒng)一風(fēng)格;將 enableMatrixVariables改為enable-matrix-variables屬性;將ignoreDefaultModelOnRedirect改為ignore-default-model-on-redirect。

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

3.1、服務(wù)器端

Java代碼  

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

非常簡單,服務(wù)器端暫停10秒再返回結(jié)果(但是服務(wù)器也是非阻塞的)。具體參考我github上的代碼。 

3.2、客戶端

Java代碼  

public static void main(String[] args) { 
  AsyncRestTemplate template = new AsyncRestTemplate(); 
  //調(diào)用完后立即返回(沒有阻塞) 
  ListenableFuture<ResponseEntity<User>> future = template.getForEntity("http://localhost:9080/spring4/api", User.class); 
  //設(shè)置異步回調(diào) 
  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來完成非阻塞,這樣的話我們也需要給它一個(gè)回調(diào)接口來拿結(jié)果; Future和Callable是一對(duì),一個(gè)消費(fèi)結(jié)果,一個(gè)產(chǎn)生結(jié)果。調(diào)用完模板后會(huì)立即返回,不會(huì)阻塞;有結(jié)果時(shí)會(huì)調(diào)用其回調(diào)。

 AsyncRestTemplate默認(rèn)使用SimpleClientHttpRequestFactory,即通過java.net.HttpURLConnection實(shí)現(xiàn);另外我們也可以使用apache的http components;使用template.setAsyncRequestFactory(new HttpComponentsAsyncClientHttpRequestFactory());設(shè)置即可。

另外在開發(fā)時(shí)盡量不要自己注冊(cè)如:

Java代碼 

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> 
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 

盡量使用

Java代碼  

<mvc:annotation-driven/>  

它設(shè)計(jì)的已經(jīng)足夠好,使用子元素可以配置我們需要的配置。

且不要使用老版本的:

Java代碼  

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> 
<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.)

總結(jié)

以上所述是小編給大家介紹的spring4新特性之web開發(fā)增強(qiáng),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • idea重新下載已刪除的maven依賴包操作

    idea重新下載已刪除的maven依賴包操作

    這篇文章主要介紹了idea重新下載已刪除的maven依賴包操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • GateWay路由規(guī)則與動(dòng)態(tài)路由詳細(xì)介紹

    GateWay路由規(guī)則與動(dòng)態(tài)路由詳細(xì)介紹

    這篇文章主要介紹了GateWay路由規(guī)則與GateWay動(dòng)態(tài)路由,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java?SE循環(huán)一些基本練習(xí)題總結(jié)

    Java?SE循環(huán)一些基本練習(xí)題總結(jié)

    循環(huán)語句可以在滿足循環(huán)條件的情況下,反復(fù)執(zhí)行某一段代碼,這段被重復(fù)執(zhí)行的代碼被稱為循環(huán)體語句,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java?SE循環(huán)一些基本練習(xí)題,需要的朋友可以參考下
    2024-03-03
  • Spring Bean創(chuàng)建和循環(huán)依賴

    Spring Bean創(chuàng)建和循環(huán)依賴

    這篇文章主要介紹了Spring Bean創(chuàng)建和循環(huán)依賴,講述了Spring容器中?Bean?的創(chuàng)建過程已經(jīng)主要的方法,另外也著重分析了循環(huán)依賴的問題,需要的小伙伴可以參考一下
    2022-05-05
  • Java基本數(shù)據(jù)類型族譜與易錯(cuò)點(diǎn)梳理解析

    Java基本數(shù)據(jù)類型族譜與易錯(cuò)點(diǎn)梳理解析

    Java有八大基本類型,很多同學(xué)只對(duì)經(jīng)常使用的int類型比較了解。有的同學(xué)是剛從C語言轉(zhuǎn)入Java學(xué)習(xí),誤以為兩者的基本數(shù)據(jù)類型完全相同,這也是大錯(cuò)特錯(cuò)的。今天這本Java基本數(shù)據(jù)類型全解析大字典,可以幫助你直接通過目錄找到你想要了解某一種基本數(shù)據(jù)類型
    2022-01-01
  • Spring?Boot?中使用@KafkaListener并發(fā)批量接收消息的完整代碼

    Spring?Boot?中使用@KafkaListener并發(fā)批量接收消息的完整代碼

    kakfa是我們?cè)陧?xiàng)目開發(fā)中經(jīng)常使用的消息中間件。由于它的寫性能非常高,因此,經(jīng)常會(huì)碰到讀取Kafka消息隊(duì)列時(shí)擁堵的情況,這篇文章主要介紹了Spring?Boot?中使用@KafkaListener并發(fā)批量接收消息,需要的朋友可以參考下
    2023-02-02
  • 詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例

    詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例

    這篇文章主要介紹了詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例的相關(guān)資料,這里對(duì)http的請(qǐng)求和響應(yīng)進(jìn)行詳細(xì)分析并附有實(shí)現(xiàn)實(shí)例,需要的朋友可以參考下
    2017-07-07
  • Java強(qiáng)制保留兩位小數(shù)的四種方法案例詳解

    Java強(qiáng)制保留兩位小數(shù)的四種方法案例詳解

    這篇文章主要介紹了Java強(qiáng)制保留兩位小數(shù)的四種方法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java中連接Mongodb進(jìn)行增刪改查的操作詳解

    Java中連接Mongodb進(jìn)行增刪改查的操作詳解

    MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,由C++語言編寫,旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案,本文給大家介紹了Java中連接Mongodb進(jìn)行操作,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-06-06
  • Spring bean的實(shí)例化和IOC依賴注入詳解

    Spring bean的實(shí)例化和IOC依賴注入詳解

    這篇文章主要介紹了Spring bean的實(shí)例化和IOC依賴注入詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03

最新評(píng)論

五莲县| 通许县| 天全县| 马关县| 枣强县| 盐津县| 磴口县| 九龙坡区| 大邑县| 深州市| 漳平市| 甘德县| 改则县| 龙口市| 镇坪县| 灵石县| 如皋市| 德钦县| 宁蒗| 乐至县| 商城县| 昭觉县| 锡林郭勒盟| 闵行区| 青冈县| 汝阳县| 抚远县| 日喀则市| 海阳市| 南木林县| 聊城市| 吉水县| 维西| 昔阳县| 洛隆县| 凤庆县| 新巴尔虎右旗| 墨竹工卡县| 剑河县| 五河县| 崇州市|