Spring3.1新特性


一、Spring2.5之前,我們都是通過實現Controller接口或其他實現來定義我們的處理器類。

二、Spring2.5引入注解式處理器支持,通過@Controller 和 @RequestMapping注解定義我們的處理器類。並且提供了一組強大的注解:
需要通過處理器映射DefaultAnnotationHandlerMapping和處理器適配器AnnotationMethodHandlerAdapter來開啟支持@Controller 和 @RequestMapping注解的處理器。

@Controller:用於標識是處理器類;
@RequestMapping:請求到處理器功能方法的映射規則;
@RequestParam:請求參數到處理器功能處理方法的方法參數上的綁定;
@ModelAttribute:請求參數到命令對象的綁定;
@SessionAttributes:用於聲明session級別存儲的屬性,放置在處理器類上,通常列出模型屬性(如@ModelAttribute)對應的名稱,則這些屬性會透明的保存到session中;
@InitBinder:自定義數據綁定注冊支持,用於將請求參數轉換到命令對象屬性的對應類型;

三、Spring3.0引入RESTful架構風格支持(通過@PathVariable注解和一些其他特性支持),且又引入了更多的注解支持:
@CookieValue:cookie數據到處理器功能處理方法的方法參數上的綁定;
@RequestHeader:請求頭(header)數據到處理器功能處理方法的方法參數上的綁定;
@RequestBody:請求的body體的綁定(通過HttpMessageConverter進行類型轉換);
@ResponseBody:處理器功能處理方法的返回值作為響應體(通過HttpMessageConverter進行類型轉換);
@ResponseStatus:定義處理器功能處理方法/異常處理器返回的狀態碼和原因;
@ExceptionHandler:注解式聲明異常處理器;
@PathVariable:請求URI中的模板變量部分到處理器功能處理方法的方法參數上的綁定,從而支持RESTful架構風格的URI;

四、還有比如:
JSR-303驗證框架的無縫支持(通過@Valid注解定義驗證元數據);
使用Spring 3開始的ConversionService進行類型轉換(PropertyEditor依然有效),支持使用@NumberFormat 和 @DateTimeFormat來進行數字和日期的格式化;
HttpMessageConverter(Http輸入/輸出轉換器,比如JSON、XML等的數據輸出轉換器);
ContentNegotiatingViewResolver,內容協商視圖解析器,它還是視圖解析器,只是它支持根據請求信息將同一模型數據以不同的視圖方式展示(如json、xml、html等),RESTful架構風格中很重要的概念(同一資源,多種表現形式);

Spring 3 引入 一個 mvc XML的命名空間用於支持mvc配置,包括如:
<mvc:annotation-driven>: 自動注冊基於注解風格的處理器需要的DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter
支持Spring3的ConversionService自動注冊
支持JSR-303驗證框架的自動探測並注冊(只需把JSR-303實現放置到classpath)
自動注冊相應的HttpMessageConverter(用於支持@RequestBody 和 @ResponseBody)(如XML輸入輸出轉換器(只需將JAXP實現放置到classpath)、JSON輸入輸出轉換器(只需將Jackson實現放置到classpath))等。
<mvc:interceptors>:注冊自定義的處理器攔截器;
<mvc:view-controller>:和ParameterizableViewController類似,收到相應請求后直接選擇相應的視圖;
<mvc:resources>:邏輯靜態資源路徑到物理靜態資源路徑的支持;
<mvc:default-servlet-handler>:當在web.xml 中DispatcherServlet使用<url-pattern>/</url-pattern> 映射時,能映射靜態資源(當Spring Web MVC框架沒有處理請求對應的控制器時(如一些靜態資源),轉交給默認的Servlet來響應靜態文件,否則報404找不到資源錯誤,)。

五、Spring3.1新特性:
對Servlet 3.0的全面支持。

@EnableWebMvc:用於在基於Java類定義Bean配置中開啟MVC支持,和XML中的<mvc:annotation-driven>功能一樣;

新的@Contoller和@RequestMapping注解支持類:處理器映射RequestMappingHandlerMapping和處理器適配器RequestMappingHandlerAdapter組合來代替Spring2.5開始的處理器映射DefaultAnnotationHandlerMapping和處理器適配器AnnotationMethodHandlerAdapter,提供更多的擴展點,它們之間的區別我們在處理器映射一章介紹。

新的@ExceptionHandler注解支持類:ExceptionHandlerExceptionResolver來代替Spring3.0的AnnotationMethodHandlerExceptionResolver,在異常處理器一章我們再詳細講解它們的區別。

@RequestMapping的"consumes" 和 "produces" 條件支持:用於支持@RequestBody 和 @ResponseBody,
1consumes指定請求的內容是什么類型的內容,即本處理方法消費什么類型的數據,如consumes="application/json"表示JSON類型的內容,Spring會根據相應的HttpMessageConverter進行請求內容區數據到@RequestBody注解的命令對象的轉換;
2produces指定生產什么類型的內容,如produces="application/json"表示JSON類型的內容,Spring的根據相應的HttpMessageConverter進行請求內容區數據到@RequestBody注解的命令對象的轉換,Spring會根據相應的HttpMessageConverter進行模型數據(返回值)到JSON響應內容的轉換
3以上內容,本章第×××節詳述。

URI模板變量增強:URI模板變量可以直接綁定到@ModelAttribute指定的命令對象、@PathVariable方法參數在視圖渲染之前被合並到模型數據中(除JSON序列化、XML混搭場景下)。

@Validated:JSR-303的javax.validation.Valid一種變體(非JSR-303規范定義的,而是Spring自定義的),用於提供對Spring的驗證器(org.springframework.validation.Validator)支持,需要Hibernate Validator 4.2及更高版本支持;

@RequestPart:提供對“multipart/form-data”請求的全面支持,支持Servlet 3.0文件上傳(javax.servlet.http.Part)、支持內容的HttpMessageConverter(即根據請求頭的Content-Type,來判斷內容區數據是什么類型,如JSON、XML,能自動轉換為命令對象),比@RequestParam更強大(只能對請求參數數據綁定,key-alue格式),而@RequestPart支持如JSON、XML內容區數據的綁定;詳見本章的第×××節;

Flash 屬性 和 RedirectAttribute:通過FlashMap存儲一個請求的輸出,當進入另一個請求時作為該請求的輸入,典型場景如重定向(POST-REDIRECT-GET模式,1、POST時將下一次需要的數據放在FlashMap;2、重定向;3、通過GET訪問重定向的地址,此時FlashMap會把1放到FlashMap的數據取出放到請求中,並從FlashMap中刪除;從而支持在兩次請求之間保存數據並防止了重復表單提交)。
Spring Web MVC提供FlashMapManager用於管理FlashMap,默認使用SessionFlashMapManager,即數據默認存儲在session中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM