文档章节

annotation-driven,annotation-config,component-scan的区别与作用

霜叶情
 霜叶情
发布于 2017/05/31 16:46
字数 552
阅读 19
收藏 0
<mvc:annotation-driven/>

相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。即解决了@Controller注解的使用前提配置。并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。

一般在springmvc项目中的spring-mvc.xml中配置该信息,取代下面的方式:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes" value="application/json" />
</bean>
</list>
</property>
</bean>

=============================

<context:annotation-config/>
  1. 隐式地向Spring容器中注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 及 equiredAnnotationBeanPostProcessor 这 4 个 BeanPostProcessor。 在配置文件中使用<context:annotationconfig/>之前,必须在 <beans> 元素中声明 context 命名空间<context:component-scan/>。

  2. 是对包进行扫描,实现注释驱动Bean定义,同时将bean自动注入容器中使用。即解决了@Controller标识的类的bean的注入和使用。

=============================

<context:component-scan/>

配置项不但启用了对类包进行扫描以实施注释驱动 Bean 定义的功能,同时还启用了注释驱动自动注入的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor),因此当使用 <context:component-scan/> 后,除非需要使用PersistenceAnnotationBeanPostProcessor和equiredAnnotationBeanPostProcessor两个Processor的功能(例如JPA等)否则就可以将 <context:annotation-config/> 移除了。

 

------

<context:component-scan/>标签是告诉Spring 来扫描指定包下的类,并注册被@Component,@Controller,@Service,@Repository等注解标记的组件。

    而<mvc:annotation-driven/>是告知Spring,我们启用注解驱动。然后Spring会自动为我们注册上面说到的几个Bean到工厂中,来处理我们的请求。

配置springmvc项目的时候,管他三七二十一,都加上<mvc:annotation-driven />,主要有下面功能:

1,支持使用ConversionService实例对表单参数进行类型转换

例如:JSP前端页面传递一个form表单包含学生信息,在控制层可以定义一个DTO Student来接收,直接就变成了对象了
2,支持使用@NumberFormat annotation,@DateTimeFormat注解完成数据类型的格式化
例如:一个DTO里面有个货币和一个日期,可以格式化
3,支持使用@Valid注解对Javabean实例进行JSR 303验证
4,支持使用@RequestBody和@ResponseBody注解

© 著作权归作者所有

共有 人打赏支持
上一篇: 国家,家国
下一篇: 博客收藏
霜叶情
粉丝 2
博文 101
码字总数 67179
作品 0
长沙
私信 提问
Spring配置文件详解:和和<mvc:annotati...

context:annotation-config/ 在基于主机方式配置Spring时,Spring配置文件applicationContext.xml,你可能会见context:annotation-config/这样一条配置,它的作用是隐式的向Spring容器注册 Au...

留给明天
2016/11/17
45
0

链接:http://blog.csdn.net/baple/article/details/16864175 链接:http://blog.csdn.net/Baple/article/details/16864835 传统的bean声明: 向Sp...

yjm199
2017/01/01
0
0

<mvc:annotation-driven >和context:component-scan的区别 为啥要说这两个注解的区别,因为<mvc:annotation-driven >和context:component-scan放置的位置出错,可能就会导致项目出现404的错误......

小车车
2016/07/07
38
0
和<context:component-

<context:annotation-config /> 它的作用是隐式地向 Spring 容器注册 - AutowiredAnnotationBeanPostProcessor、 - CommonAnnotationBeanPostProcessor、 - PersistenceAnnotationBeanPostP......

五大三粗
2015/11/02
0
0
用spring mvc注解,java代码还能分模块化分层吗?

现在有一个java类,用的注解,这个类放到com.yizu.controller启动不会报错,如果放到com.yizu.system.controller启动报错. 用spring mvc注解,java代码还能分模块化分层吗?...

zhang_huan
2015/09/23
274
0

没有更多内容

加载失败,请刷新页面

加载更多

如何利用 Data too long for column 进行一些简单的攻击

1: 前提条件, 后台没有校验长度和频率校验,也没有CSRF校验,直接往数据库插入数据,此时很容易触发Data too long for column错误(一般抛出异常都挺浪费资源的,耗时,耗内存,耗cpu),一旦...

专业写BUG的程序员
4分钟前
0
0
RMAN命令详解

一、list命令 1. List 当前RMAN所备份的数据库: 1.1. list backup summary; --概述可用的备份 list incarnation;--汇总查询 --如果备份文件多的话多用这两个list命令可以对备份文件有个总体...

突突突酱
7分钟前
0
0
简单聊聊Linux学习经历

学习,是我们一生中都规避不了的一个话题,人的一生中都是在不断的学习,无论是功成名就的人士,还是一无是处的小混混,始终都处在一个不断学习的环境中,只是学习的内容千差万别,有的人是为...

问题终结者
15分钟前
0
0
Mysql高级 (2)——sql性能调优

sql 性能下降的原因

小小小施爷
19分钟前
0
0
MaxCompute用户初体验

作为一名初次使用MaxCompute的用户,我体会颇深。MaxCompute 开箱即用,拥有集成化的操作界面,你不必关心集群搭建、配置和运维工作。仅需简单的点击鼠标,几步操作,就可以在MaxCompute中上...

阿里云官方博客
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部