spring配置注解context:annotation-config和context:component-scan区别_Marvin-Fox的博客-程序员信息网

技术标签: Spring  

 

此文章转自https://blog.csdn.net/u010648555/article/details/76371474,仅作为记录查询所用

Spring 中在使用注解(Annotation)会涉及到< context:annotation-config> 和 < context:component-scan>配置,下面就对这两个配置进行诠释。

1.context:annotation-config

< context:annotation-config> 是用于激活那些已经在spring容器里注册过的bean上面的注解,也就是显示的向Spring注册

AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
RequiredAnnotationBeanPostProcessor

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

  • 比如我们要使用@Autowired注解,那么就必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。传统声明方式如下
<bean class="org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor "/>
  • 如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor。传统声明方式如下
<bean class="org.springframework.beans.factory.annotation. CommonAnnotationBeanPostProcessor"/> 
  • 如果想使用@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean。
<bean class="org.springframework.beans.factory.annotation.PersistenceAnnotationBeanPostProcessor"/> 
  • 如果想使用 @Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean。

同样,传统的声明方式如下:

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

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

思考1:假如我们要使用如@Component、@Controller、@Service等这些注解,使用能否激活这些注解呢?

答案:单纯使用< context:annotation-config/>对上面这些注解无效,不能激活!

 

2.context:component-scan

Spring 给我提供了context:component-scan配置,如下

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

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

通过对base-package配置,就可以把controller包下 service包下 dao包下的注解全部扫描到了! 

 

3.总结

(1)< context:annotation-config />:仅能够在已经在已经注册过的bean上面起作用。对于没有在spring容器中注册的bean,它并不能执行任何操作。 


(2)< context:component-scan base-package="XX.XX"/> :除了具有上面的功能之外,还具有自动将带有@component,@service,@Repository等注解的对象注册到spring容器中的功能。 

 

思考2:如果同时使用这两个配置会不会出现重复注入的情况呢?

答案:因为< context:annotation-config />和 < context:component-scan>同时存在的时候,前者会被忽略。如@autowire,@resource等注入注解只会被注入一次!


彩蛋

< mvc:annotation-driven/>


< mvc:annotation-driven/>从 标签的shecma就能看出来,mvc,主要就是为了Spring MVC来用的,提供Controller请求转发,json自动转换等功能。相比上面的两个shecma是context开头,那么主要是解决spring**容器**的一些注解。

 

< mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。 
并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。

在实际开发使用SpringMVC开启这个配置,否则会出现一些功能不能正常使用!

如:@Restcontroller无效, 依然去解析视图

参考资料

Spring < context:annotation-config/> 解说 
Spring 开启Annotation < context:annotation-config> 和 < context:component-scan>诠释及区别

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fox_bert/article/details/80793030

智能推荐

手把手教你用原生JavaScript造轮子(2)——轮播图(更新:ES6版本)_weixin_34413357的博客-程序员信息网

通过上一篇文章的学习,我们基本掌握了一个轮子的封装和开发流程。那么这次将带大家开发一个更有难度的项目——轮播图,希望能进一步加深大家对于面向对象插件开发的理解和认识。So, Let's begin!目前项目使用 ES5及UMD 规范封装,所以在前端暂时只支持&lt;script&gt;标签的引入方式,未来会逐步用 ES6 进行重构演...

[zz]使用boost::shared_ptr的注意条款_weixin_30898109的博客-程序员信息网

转载自:http://qz.qq.com/4439401/blog?uin=4439401&amp;vin=0&amp;blogid=1335593811条款1:不要把一个原生指针给多个shared_ptr管理int* ptr = new int;shared_ptr&lt;int&gt; p1(ptr);shared_ptr&lt;int&gt; p2(ptr); //logic...

蓝海创意云丨一份精准的剧本顺场表让您轻松搞定拍摄计划和项目预算_创意云李haha的博客-程序员信息网

徐建,国内顶尖视效团队 MORE VFX 创始人在“电影视效公司生存法则”中谈到“我们现在大多是项目的导演和制片人都没有能力做出准确的BD,很多剧组没有习惯用自己的视效总监和视效制片人做BD,导致现在一个项目的BD和预算工作会转移到后期视效公司,视效总监、视效制片人、视效统筹、CG总监、部门主管加班熬夜算一两个月才能算出来,公司最贵的一帮人忙活这么长时间,实在想不到任何不收费的理由,如果每个项目都能由片方给到详细的BD,此项费用是可以省的。”剧本分解( Break down)简称BD :在剧..

使用Java读取Excel文件内容_java读取excel文件内容并输出_陈夏明的博客-程序员信息网

使用Java读取Excel文件的内容非常简单,Apache POI这个项目已经实现了对此类文档操作的功能,我们只需学会如何使用它即可。1.首先需要引入Apache POI,这里推荐使用Maven的方式管理项目依赖。在pom.xml文件中加入依赖项:<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artif

Linux基础知识、常用命令和操作_吉大秦少游的博客-程序员信息网

文章目录1 Linux常用命令2 Linux的基本命令格式3 常用命令快捷键4 Linux文件与操作5 显示文件/字符串6 Linux网络7 Linux软件安装1 Linux常用命令Linux每个用户都要有一个主目录,主目录就是第一次登陆系统,用户的默认当前目录(/home/用户);每一个用户必须有一个主目录,所以用useradd创建用户的时候,一定给用户指定一个主目录;用户的主目录一般要放到根目录的home目录下,用户的主目录和用户名是相同的;如果创建用户的时候,不指定组名,那么系统会自动创建一个和

更改计算机硬盘名字,如何修改盘符 – 磁盘及光驱名称错乱,教你怎么更改回来..._Linkzero Tsang的博客-程序员信息网

一般情况下,打开“我的电脑”后,我们会看到排在前面是硬盘,紧接着的是光驱,然后是插上去的可移动磁盘或U盘。但有时我们可能会神奇地发现硬盘盘符及光盘驱动器名称及排列错乱了。比如正常情况下C,D,E,F是硬盘所在的盘符,G盘为光驱。当出现错乱后,可能变为了C,D盘为硬盘,光驱所在盘符穿插在中间变为了E盘,紧接着F,G盘为硬盘。虽然这种错乱一般不会影响我们正常使用电脑,但是看上去会很别扭,其实要修改过来...

随便推点

教你修改以及重构skb_skb怎么修改灭点_weijinqian0的博客-程序员信息网

测试环境:   CentOS5.3 2.6.18工具:   sendip和wireshark   sendip可以发送各种数据包,确实方便.wireshark图形化的显示对于分析整个数据包还是相当不错的...一:内核态基于Netfilter构造数据包主要有两种方式:1. alloc_skb申请一个skb结构体,然后根据实际的应用填充不同的成员,或者基

常用排序算法--冒泡排序及改进和插入排序时间复杂度分析_Spground的博客-程序员信息网

常用排序算法–冒泡排序及改进和插入排序时间复杂度分析常用排序算法冒泡排序及改进和插入排序时间复杂度分析排序及常见排序算法插入排序时间复杂度分析冒泡排序冒泡排序的改进排序及常见排序算法 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为

Iwfu-GitHub客户端使用_不要辣椒谢谢的博客-程序员信息网

Git/GitHub介绍GitHub是著名的项目托管平台,有关Git和GitHub的介绍参考下面链接:Git介绍GitHub介绍GitHub客户端安装其实AndroidStudio已经集成了GitHub版本控制插件,开发时直接在AndroidStudio上使用即可,不过为了方便管理和查看,还是单独下载一个GitHub客户端使用。首先要使用Git版本控制要下载Git客户端到本地,官网下载地址: h

Go语言学习笔记9:base64编码图片_BigPomme的博客-程序员信息网

项目需求,需要使用GO语言对于图片文件进行base64编码,操作如下:image, _:= ioutil.ReadFile(response.ImageFile)imageBase64 := base64.StdEncoding.EncodeToString(image)

c语言判定三角形流程图_C语言判断三角形的类型_weixin_39635459的博客-程序员信息网

根据输入的三角形的三条边判断三角形的类型,并输出其面积和类型。算法思想首先判断其两边之和是否大于第三边,若大于则判断可以构成三角形,再进一步判断该三角形是什么三角形,并计算这个三角形的面积;否则不能构成三角形。① 从键盘输入三角形的三条边。② 判断两边之和是否大于第三边。③ 若条件成立则判断可构成三角形,计算其面积,并判断其类型;否则判断其不能构成三角形。④ 在类型判断中首先判断其是否三边相等,条...

推荐文章

热门文章

相关标签