欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

從Spring4開始,Spring以Servlet3為進行開發(fā),如果用Spring MVC 測試框架的話需要指定Servlet3兼容的jar包(因為其Mock的對象都是基于Servlet3的)。另外為了方便Rest開發(fā),通過新的@RestController指定在控制器上,這樣就不需要在每個@RequestMapping方法上加 @ResponseBody了。而且添加了一個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}"; 
  } 
} 

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

Java代碼 

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

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

Java代碼  

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

2、mvc:annotation-driven配置變化

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

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

3.1、服務器端

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

非常簡單,服務器端暫停10秒再返回結(jié)果(但是服務器也是非阻塞的)。具體參考我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); 
  //設置異步回調(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來完成非阻塞,這樣的話我們也需要給它一個回調(diào)接口來拿結(jié)果; Future和Callable是一對,一個消費結(jié)果,一個產(chǎn)生結(jié)果。調(diào)用完模板后會立即返回,不會阻塞;有結(jié)果時會調(diào)用其回調(diào)。

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

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

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/>  

它設計的已經(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ā)增強,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • Java如何接收前端easyui?datagrid傳遞的數(shù)組參數(shù)

    Java如何接收前端easyui?datagrid傳遞的數(shù)組參數(shù)

    這篇文章分享一下怎么在easyui的datagrid刷新表格時,在后端java代碼中接收datagrid傳遞的數(shù)組參數(shù),本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-11-11
  • 使用XSD校驗Mybatis的SqlMapper配置文件的方法(1)

    使用XSD校驗Mybatis的SqlMapper配置文件的方法(1)

    這篇文章以前面對SqlSessionFactoryBean的重構(gòu)為基礎,簡單的介紹了相關操作知識,然后在給大家分享使用XSD校驗Mybatis的SqlMapper配置文件的方法,感興趣的朋友參考下吧
    2016-11-11
  • Java中BigDecimal類的使用詳解

    Java中BigDecimal類的使用詳解

    這篇文章主要介紹了Java中BigDecimal類的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java終止線程的幾種方式實例總結(jié)

    Java終止線程的幾種方式實例總結(jié)

    這篇文章主要給大家介紹了關于Java終止線程的幾種方式,線程停止即Terminated狀態(tài)是伴隨run方法的結(jié)束而生,也就是run完成后由Thread類來決定線程停止了,銷毀資源釋放空間,下面需要的朋友可以參考下
    2023-06-06
  • 基于ReentrantLock的實現(xiàn)原理講解

    基于ReentrantLock的實現(xiàn)原理講解

    這篇文章主要介紹了ReentrantLock的實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • dockerfile-maven-plugin極簡教程(推薦)

    dockerfile-maven-plugin極簡教程(推薦)

    這篇文章主要介紹了dockerfile-maven-plugin極簡教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Java的運算符和程序邏輯控制你了解嗎

    Java的運算符和程序邏輯控制你了解嗎

    這篇文章主要為大家詳細介紹了Java的運算符和程序邏輯控制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 一文詳解如何配置MyBatis實現(xiàn)打印可執(zhí)行的SQL語句

    一文詳解如何配置MyBatis實現(xiàn)打印可執(zhí)行的SQL語句

    在MyBatis中,動態(tài)SQL是一個強大的特性,允許我們在XML映射文件或注解中編寫條件語句,根據(jù)運行時的參數(shù)來決定SQL的具體執(zhí)行內(nèi)容,這篇文章主要給大家介紹了關于如何配置MyBatis實現(xiàn)打印可執(zhí)行的SQL語句的相關資料,需要的朋友可以參考下
    2024-08-08
  • Java中實現(xiàn)多重排序的幾種方法小結(jié)

    Java中實現(xiàn)多重排序的幾種方法小結(jié)

    Java中的多重排序通常指的是同時對一個集合中的兩個或更多列或多維度的數(shù)據(jù)進行排序,這通常通過自定義Comparator實現(xiàn),可以結(jié)合Arrays.sort()或Collections.sort()方法,當需要進行多重排序時,即根據(jù)多個字段進行排序,我們可以采用以下幾種方法
    2024-10-10
  • java聯(lián)調(diào)生成測試數(shù)據(jù)工具類方式

    java聯(lián)調(diào)生成測試數(shù)據(jù)工具類方式

    這篇文章主要介紹了java聯(lián)調(diào)生成測試數(shù)據(jù)工具類方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論