这几个注解的你了解吗

<mvc:annotation-driven />与<context:annotation-config />

Spring家族的配置中这两个配置的意义,说具体点其实根据标签的schema就能看出来,mvc,主要就是为了Spring MVC来用的,提供Controller请求转发,json自动转换等功能,而context这个主要是解决spring容器的一些注解。

<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。

<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是Spring MVC为@Controllers分发请求所必须的。

并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。

我们处理响应ajax请求时,就使用到了对json的支持。

对action写JUnit单元测试时,要从spring IOC容器中取DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,来完成测试,取的时候要知道是<mvc:annotation-driven />这一句注册的这两个bean。

<context:annotation-config> declares support for general annotations such as @Required, @Autowired, @PostConstruct, and so on. <mvc:annotation-driven /> is actually rather pointless. It declares explicit support for annotation-driven MVC controllers (i.e.@RequestMapping, @Controller, etc), even though support for those is the default behaviour. My advice is to always declare <context:annotation-config>, but don't bother with <mvc:annotation-driven /> unless you want JSON support via Jackson.

在基于主机方式配置Spring的配置文件中,你可能会见到<context:annotation-config/>这样一条配置,他的作用是式地向 Spring 容器注册

AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、

PersistenceAnnotationBeanPostProcessor 以及 RequiredAnnotationBeanPostProcessor

这 4 个BeanPostProcessor。

注册这4个 BeanPostProcessor的作用,就是为了你的系统能够识别相应的注解。

例如:

如果你想使用@Autowired注解,那么就必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。传统声明方式如下

<bean class="org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor "/>

如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor

如果想使用@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean。

如果想使用 @Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean。同样,传统的声明方式如下:

<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/> 

一般来说,这些注解我们还是比较常用,尤其是Antowired的注解,在自动注入的时候更是经常使用,所以如果总是需要按照传统的方式一条一条配置显得有些繁琐和没有必要,于是spring给我们提供<context:annotation-config/>的简化配置方式,自动帮你完成声明。

不过,我们使用注解一般都会配置扫描包路径选项

<context:component-scan base-package=”XX.XX”/> 

该配置项其实也包含了自动注入上述processor的功能,因此当使用 <context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了。


原文发布于微信公众号 - 我的小碗汤(mysmallsoup)

原文发表时间:2018-11-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jianhuicode

Android Studio 错误集

错误列表与解决方案: 1.Android studio Gradle project sync failed Android studio 构建项目出错 Err...

2466
来自专栏LhWorld哥陪你聊算法

Flume篇---Flume安装配置与相关使用

Copy过来一段介绍Apache Flume 是一个从可以收集例如日志,事件等数据资源,并将这些数量庞大的数据从各项数据资源中集中起来存储的工具/服务,或者数集...

3193
来自专栏大内老A

《WCF技术剖析(卷2)》目录

第1章 异常处理 (Exception Handling) 1.1. WCF基本异常处理模式 1.1.1. 当异常从服务端抛出(S101) 1.1.2. 异常细...

2149
来自专栏Java进阶架构师

写出我的第一个框架:迷你版Spring MVC

原文:https://www.jianshu.com/p/f454662f497e

1923
来自专栏老码农专栏

使用 maven 生成一个支持端到端自动测试的 RESTful 服务项目脚手架

2024
来自专栏代码拾遗

Spring Boot 2.0 教程 - 深入SpringAplication

可以通过SpringApplication.run() 方法轻松的启动一个Spring应用,例如

1214
来自专栏码匠的流水账

使用SseEmitter不断向网页输出结果

之前写过一篇文章:springmvc不断输出文本到网页,采用的是对response不断进行write和flush实现的。在spring 4.2版本的时候提供了一...

3301
来自专栏Java Web

Spring Boot【快速入门】

上面是引自官网的一段话,大概是说: Spring Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来...

5245
来自专栏腾讯云Elasticsearch Service

Elasticsearch Rest Client实战

Elasticsearch官方推荐使用Java REST客户端连接集群并进行数据操作。

6234
来自专栏Java工程师日常干货

MyBatis+Spring MVC开发指南(三)

本系列的前面2篇文章,已经为大家介绍了MyBatis;从本篇博客开始将为大家介绍Spring MVC开发的那些事!关于Spring MVC这块将会涵盖Sprin...

841

扫码关注云+社区

领取腾讯云代金券