日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

mvc:annotation-driven 注解的作用

發(fā)布時間:2025/3/12 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mvc:annotation-driven 注解的作用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.自動注冊映射處理器和適配器

這是該注解的主要功能,添加< mvc:annotation-driven/>注解后,容器中會<自動注冊HandlerMapping與HandlerAdapter 兩個bean。省去手動注冊HandlerMapping和HandlerAdapter的步驟。

當配置了< mvc:annotation-driven/>后,Spring就知道了我們啟用注解驅(qū)動。然后Spring通過< context:component-scan/>標簽的配置,會自動為我們將掃描到的@Component,@Controller,@Service,@Repository等注解標記的組件注冊到工廠中,來處理我們的請求。

HandlerMapping的實現(xiàn)類的作用:將請求映射到帶@RequestMapping注釋的控制器方法,將URL路徑映射到控制器bean名稱。
HandlerAdapter的實現(xiàn)類的作用:實現(xiàn)類RequestMappingHandlerAdapter,處理請求的適配器,確定調(diào)用哪個類的哪個方法,并且構(gòu)造方法參數(shù),返回值。

在spring mvc 3.1以上,DefaultAnnotationHandlerMapping與AnnotationMethodHandlerAdapter對應(yīng)變更為:
DefaultAnnotationHandlerMapping -> RequestMappingHandlerMapping
AnnotationMethodHandlerAdapter -> RequestMappingHandlerAdapter
AnnotationMethodHandlerExceptionResolver -> ExceptionHandlerExceptionResolver

2.映射異常處理

處理@ExceptionHandler標注的異常處理函數(shù):在dispatcherServlet中,當用戶未注冊自定義的ExceptionResolver時,自動注冊AnnotationMethodHandlerExceptionResolver來對使用@ExceptionHandler標注的異常處理函數(shù)進行解析處理(這也導(dǎo)致當用戶注冊了自定義的exeptionResolver時將可能導(dǎo)致無法處理@ExceptionHandler)。

3.數(shù)據(jù)校驗

官方文檔解釋:“默認情況下,當在類路徑中檢測到諸如Hibernate Validator之類的Bean驗證提供程序時,使用@EnableWebMvc或<mvc:annotation-driven>會通過LocalValidatorFactoryBean在Spring MVC中自動注冊Bean驗證支持。”

要實現(xiàn)Hibernate Validator/JSR303 校驗(或者其他各種校驗),必須實現(xiàn)SpringMVC提供的一個接口:ValidatorFactory。LocalValidatorFactoryBean是ValidatorFactory的一個實現(xiàn)類。<mvc:annotation-driven ></mvc:annotation-driven>會在springmvc容器中自動加載一個LocalValidatorFactoryBean類,因此可以直接實現(xiàn)數(shù)據(jù)校驗。

就日常使用來說,比如支持@Valid等一系列校驗注解。

4.數(shù)據(jù)類型轉(zhuǎn)換和數(shù)據(jù)格式化

< mvc:annotation-driven/>支持ConversionService,可以進行常見數(shù)據(jù)類型的轉(zhuǎn)換和格式化。

ConversionService:定義了一個統(tǒng)一的API,用于在運行時執(zhí)行類型轉(zhuǎn)換邏輯。大多數(shù)ConversionService實現(xiàn)還實現(xiàn)ConverterRegistry,該注冊器提供用于注冊轉(zhuǎn)換器的SPI。在內(nèi)部,ConversionService實現(xiàn)委派其注冊的轉(zhuǎn)換器執(zhí)行類型轉(zhuǎn)換邏輯。
ConversionService會在應(yīng)用程序啟動時實例化,然后在多個線程之間共享。
在Spring應(yīng)用程序中,通常會為每個Spring容器(或ApplicationContext)配置一個ConversionService實例。

FormattingConversionServiceFactoryBean:一個工廠,提供對FormattingConversionService的便捷訪問,該服務(wù)配置有用于常見類型(例如數(shù)字和日期時間)的轉(zhuǎn)換器和格式化程序。

①默認:
添加 < mvc:annotation-driven/>后,會默認創(chuàng)建一個ConversionService,即 FormattingConversionServiceFactoryBean。
使用FormattingConversionServiceFactoryBean可以讓SpringMVC支持@NumberFormat和@DateTimeFormat等Spring內(nèi)部自定義的轉(zhuǎn)換器。

②:自定義:
默認的ConversionService可以在字符串,數(shù)字,枚舉,集合,映射和其他常見類型之間進行轉(zhuǎn)換。
如果要實現(xiàn)其他的類型轉(zhuǎn)換,比如將字符串 “LiHua”-23-“男” 轉(zhuǎn)換為Student實體類,可以自定義類型轉(zhuǎn)換器。
要支持自己自定義的格式器和轉(zhuǎn)換器(實現(xiàn)Converter,ConverterFactory或GenericConverter接口),只需自定義相應(yīng)的類并加入IOC容器,然后通過設(shè)置converters屬性將自定義的轉(zhuǎn)換器注冊到ConversionService即可。

XML配置文件:

<mvc:annotation-driven conversion-service="conversionService"/><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><ref bean="employeeConverter"/></set></property></bean>

5.支持使用@RequestBody、@ResponseBody

這個沒什么好說的了。

6.支持靜態(tài)資源文件加載和請求映射同時使用

在配置完靜態(tài)資源訪問后,如果沒有配置< mvc:annotation-driven/>,springmvc將只能訪問靜態(tài)資源,而無法進行請求映射。
因此,有靜態(tài)資源文件需要加載的時候,一定要配置< mvc:annotation-driven/>。

< mvc:annotation-driven/>允許將DispatcherServlet映射到“ /”(從而覆蓋了容器默認Servlet的映射),同時仍允許容器默認Servlet處理靜態(tài)資源請求。 它使用URL映射“ / **”配置DefaultServletHttpRequestHandler,并且相對于其他URL映射具有最低優(yōu)先級。

關(guān)于靜態(tài)資源訪問的配置:
在springmvc中,直接訪問靜態(tài)資源會404,因為之前配置的攔截器會將所有的請求通過/攔截,交給mvc的入口DispatcherServlet去匹配@RequestMapping/path,訪問不到就報錯了。

解決:如果是需要mvc處理的,則交給@RequestMapping;如果不需要mvc處理,則使用服務(wù)器(Tomcat)默認的servlet處理:對應(yīng)的請求交給servlet處理,沒有對應(yīng)的servlet則直接訪問。默認的servlet在Tomcat配置文件\conf/web.xml中。

加載靜態(tài)資源的三種方案:
①使用< mvc:default-servlet-handler/>。
②配置/XX /**將靜態(tài)資源文件映射到 ResourceHttpRequestHandler 進行處理。

<mvc:resources mapping="/js/**" location="/js/"></mvc:resources><mvc:resources mapping="/css/**" location="/css/"></mvc:resources>1

③激活Tomcat的defaultServlet來處理靜態(tài)文件。

<servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.css</url-pattern> </servlet-mapping>1234567891011

注意:如果不使用< mvc:resources/>注冊HandlerMapping,而要設(shè)置自己的自定義HandlerMapping實例,請確保將其order屬性設(shè)置為小于DefaultServletHttpRequestHandler的Integer.MAX_VALUE的值。
因為spring 會先執(zhí)行 order 值比較小的,默認的應(yīng)該servlet在最后執(zhí)行,以便于處理不可能進行請求映射的靜態(tài)資源訪問。
補充理解:
DefaultAnnotationHandlerMapping 的 order 屬性值是:0。
<mvc:resources/ >自動注冊的 SimpleUrlHandlerMapping 的 order 屬性值是: 2147483646。
< mvc:default-servlet-handler/>自動注冊的 SimpleUrlHandlerMapping 的 order 屬性值是:2147483647。
因此映射的順序是:注解映射——<mvc:resources/ >映射的靜態(tài)資源——< mvc:default-servlet-handler/> 兜底。

7.其他功能

啟用矩陣變量:在MVC命名空間中,<mvc:annotation-driven>元素具有應(yīng)設(shè)置為true的enable-matrix-variables屬性。 默認情況下,它設(shè)置為false。

配置異步請求處理:MVC Java配置和MVC名稱空間提供用于配置異步請求處理的選項。 WebMvcConfigurer具有方法configureAsyncSupport,而<mvc:annotation-driven>具有子元素。

創(chuàng)建ContentNegotiationManager:在MVC命名空間中,<mvc:annotation-driven>元素具有content-negotiation-manager屬性,該屬性期望可以使用ContentNegotiationManagerFactoryBean創(chuàng)建ContentNegotiationManager。

數(shù)據(jù)綁定支持。

…(我應(yīng)該沒說全,還有別的功能,用到的時候再說吧)

8.< mvc:annotation-driven /> 和< context:annotation-config/>的關(guān)系:

< mvc:annotation-driven />:雖然有這么多功能,但主要還是為了Spring MVC來用的,提供Controller請求轉(zhuǎn)發(fā),json自動轉(zhuǎn)換等功能。

< context:annotation-config/>:向 Spring 容器注冊 4 個BeanPostProcessor。注冊這4個 BeanPostProcessor的作用,就是為了系統(tǒng)能夠識別相應(yīng)的注解。常見的如:@ Resource 、@Required、@Autowired等。
不過,其實包掃描配置<context:component-scan base-package=”XX.XX”/> 也提供上述功能,因此當啟動用了包掃描就不必再配置< context:annotation-config/>了。

總結(jié)

以上是生活随笔為你收集整理的mvc:annotation-driven 注解的作用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。