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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

context:annotation-config/,mvc:annotation-driven/和context:component-scan之间的关系

發(fā)布時(shí)間:2023/12/4 c/c++ 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 context:annotation-config/,mvc:annotation-driven/和context:component-scan之间的关系 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

現(xiàn)在常用框架中SpringMVC.xml配置是:

<mvc:annotation-driven/>和<context:component-scan>

那么<context:annotation-config/>呢?


首先看一下三個(gè)注解各自定義:

①?<context:annotation-config/>

1.如果你想使用@Autowired注解,那么就必須事先在?spring?容器中聲明 AutowiredAnnotationBeanPostProcessor Bean。

2.如果想使用@Resource 、@PostConstruct、@PreDestroy等注解就必須聲明CommonAnnotationBeanPostProcessor

3.如果想使用@PersistenceContext注解,就必須聲明PersistenceAnnotationBeanPostProcessor的Bean。

4.如果想使用 @Required的注解,就必須聲明RequiredAnnotationBeanPostProcessor的Bean。

使用<context:annotation- config/>隱式地向 Spring容器注冊這4個(gè)BeanPostProcessor :

AutowiredAnnotationBeanPostProcessor、 RequiredAnnotationBeanPostProcessor、 CommonAnnotationBeanPostProcessor以及 PersistenceAnnotationBeanPostProcessor

<context:annotation- config/>是用來使上述注解起作用的,也就是說激活已經(jīng)在application context中注冊的bean。?
之所以這樣說是因?yàn)?lt;context:annotation-config />僅能夠在已經(jīng)在已經(jīng)注冊過的bean上面起作用。對于沒有在spring容器中注冊的bean,它并不能執(zhí)行任何操作,也就是說如果你并沒有spring容器中注冊過bean(spring配置文件中配置bean就是注冊),那么上述的那些注解并不會(huì)在你未注冊過的bean中起作用。


②<context:component-scan>

<context:component-scan>做了<context:annotation-config>要做的事情,還額外支持@Component,@Repository,@Service,@Controller注解。
并且<context:component-scan>掃描base-package并且在application context中注冊掃描的beans.

所以配置<context:component-scan>就不需要配置<context:annotation- config/>


③?<mvc:annotation-driven/>

至于該項(xiàng)看前綴就應(yīng)該知道是springmvc所需要的注解。

<mvc:annotation-driven/>相當(dāng)于注冊了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter兩個(gè)bean,配置一些messageconverter。即解決了@Controller注解的使用前提配置。

我們找到對應(yīng)的實(shí)現(xiàn)類是:

org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser。

通過閱讀類注釋文檔,我們發(fā)現(xiàn)這個(gè)類主要是用來向工廠中注冊了

  • RequestMappingHandlerMapping
  • BeanNameUrlHandlerMapping
  • RequestMappingHandlerAdapter
  • HttpRequestHandlerAdapter
  • SimpleControllerHandlerAdapter
  • ExceptionHandlerExceptionResolver
  • ResponseStatusExceptionResolver
  • DefaultHandlerExceptionResolver

上面幾個(gè)Bean實(shí)例。這幾個(gè)類都是用來做什么的呢?

前兩個(gè)是HandlerMapping接口的實(shí)現(xiàn)類,用來處理請求映射的。

  • 其中第一個(gè)是處理@RequestMapping注解的。
  • 第二個(gè)會(huì)將controller類的名字映射為請求url。

中間三個(gè)是用來處理請求的。具體點(diǎn)說就是確定調(diào)用哪個(gè)controller的哪個(gè)方法來處理當(dāng)前請求。

  • 第一個(gè)處理@Controller注解的處理器,支持自定義方法參數(shù)和返回值(很酷)。
  • 第二個(gè)是處理繼承HttpRequestHandler的處理器。
  • 第三個(gè)處理繼承自Controller接口的處理器。

后面三個(gè)是用來處理異常的解析器。

另外還將提供以下支持:

① 支持使用ConversionService實(shí)例對表單參數(shù)進(jìn)行類型轉(zhuǎn)換;?
② 支持使用@NumberFormatannotation、@DateTimeFormat注解完成數(shù)據(jù)類型的格式化;?
③ 支持使用@Valid注解對Java?bean實(shí)例進(jìn)行JSR 303驗(yàn)證;?
④ 支持使用@RequestBody和@ResponseBody注解

?

轉(zhuǎn)自:http://blog.csdn.net/sunhuwh/article/details/25558867

<annotaion-driven/>標(biāo)簽:

這個(gè)標(biāo)簽對應(yīng)的實(shí)現(xiàn)類是org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser

仔細(xì)閱讀它的注釋文檔可以很明顯的看到這個(gè)類的作用。解析這個(gè)文檔:

這個(gè)類主要注冊8個(gè)類的實(shí)例:

1.RequestMappingHandlerMapping

2.BeanNameUrlHandlerMapping

3.RequestMappingHandlerAdapter

4.HttpRequestHandlerAdapter

5.SimpleControllerHandlerAdapter

6.ExceptionHandlerExceptionResolver

7.ResponseStatusExceptionResolver

8.DefaultHandlerExceptionResolver

1是處理@RequestMapping注解的,2.將controller類的名字映射為請求url。1和2都實(shí)現(xiàn)了HandlerMapping接口,用來處理請求映射。

3是處理@Controller注解的控制器類,4是處理繼承HttpRequestHandlerAdapter類的控制器類,5.處理繼承SimpleControllerHandlerAdapter類的控制器。所以這三個(gè)是用來處理請求的。具體點(diǎn)說就是確定調(diào)用哪個(gè)controller的哪個(gè)方法來處理當(dāng)前請求。

6,7,8全部繼承AbstractHandlerExceptionResolver,這個(gè)類實(shí)現(xiàn)HandlerExceptionResolver,該接口定義:接口實(shí)現(xiàn)的對象可以解決處理器映射、執(zhí)行期間拋出的異常,還有錯(cuò)誤的視圖。

所以<annotaion-driven/>標(biāo)簽主要是用來幫助我們處理請求映射,決定是哪個(gè)controller的哪個(gè)方法來處理當(dāng)前請求,異常處理。

?

<context:component-scan/>標(biāo)簽:

它的實(shí)現(xiàn)類是org.springframework.context.annotation.ComponentScanBeanDefinitionParser.

把鼠標(biāo)放在context:component-scan上就可以知道有什么作用的,用來掃描該包內(nèi)被@Repository @Service @Controller的注解類,然后注冊到工廠中。并且context:component-scan激活@ required。@ resource,@ autowired、@PostConstruct @PreDestroy @PersistenceContext @PersistenceUnit。使得在適用該bean的時(shí)候用@Autowired就行了。

?

總結(jié)

以上是生活随笔為你收集整理的context:annotation-config/,mvc:annotation-driven/和context:component-scan之间的关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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