Spring支持三种注册Bean及装配Bean的方式:

  1. 显式地在Java代码中注册及装配
  2. 显示地在Xml文件中注册及装配
  3. 隐式地装配,即自动注册及装配

这三种方式可以混合使用。选择哪种更多地是看个人品味。

下文主要介绍第三种方式:自动扫描注册Bean及自动装配(Autowiring)Bean(在beans.xml中配置)。

1. <context: annotation-config/>

这个标签会自动向Spring容器注册以下四个BeanPostProcessor, 让系统识别对应的注解从而支持相关的自动装配:

BeanPostProcessor 对应的注解
AutowiredAnnotationBeanPostProcessor  @Autowired
CommonAnnotationBeanPostProcessor 

@Resource

@PostConstruct

@PreDestroy

PersistenceAnnotationBeanPostProcessor 

@PersistenceUnit

@PersistenceContext

RequiredAnnotationBeanPostProcessor @Required

传统的注册方式:

 <bean class="org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor"/>
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>

这个标签只支持自动装配,不支持自动注册(因为不能识别@Component, @Controller, @Service, @Repository;要想识别这四个注解,需要配置<context: component-scan base-package="xxx.xxx"/>标签, 见2。)。

Spring支持以下几种不同的用于自动装配(Autowiring)的注解:

  • Spring自带的@Autowired:可用于字段和方法,默认按类型装配,允许null值,如@Autowired(required=false)。

     @Autowired()
    @Qualifier("baseDao")
    private IBaseDao baseDao;
  • JSR-250 @Resource:默认按名称装配
     @Resource(name="baseDao")
    private IBaseDao baseDao;
  • JSR-300 @Inject

推荐使用@Resource, Java的一部分,减少同Spring的耦合。

2. <context: component-scan base-package="xxx.xxx"/>

这个标签包含了<context: annotation-config/>的功能;既支持自动装配,又支持自动注册。

支持@Component, @Controller, @Service, @Repository, @RestController, @ControllerAdvice, @Configuration注解。

作用:扫描base-package并在application context中注册扫描到的使用了以上注解的beans。

注意:Spring容器默认关闭注解装配。可以使用1或2开启注解装配。

3. <mvc: annotation-driven>

这个标签会自动注册以下bean:

  • DefaulAnnotationHandlerMapping
  • AnnotationMethodHandlerAdapter

这是Spring MVC为@Controller, @RequestMapping分发请求所必需的。

注意:现在Spring 3.1对@Controller, @RequestMapping两个注解的支持是默认开启的。除非想要获得JSON的支持(Jackson),否则不必声明这个标签。

参考资料:

Difference between <context:annotation-config> vs <context:component-scan>

Spring in Action, 4th Edition

Spring 自动注册及自动装配的更多相关文章

  1. Zabbix 设置自动添加主机两种方法(自动注册、自动发现)

    在实际生产环境中,我们可能需要将很多台主机添加到 Zabbix Server 里,我们进行手动添加的话,会比较麻烦.费时,而且还容易出错.所以一般我们会设置主机自动注册.这样就比较方便. 官方文档链接 ...

  2. Zabbix实战-简易教程--动作(Actions)--自动注册

    一.概述 之前已经讲述了自动发现功能,自动注册和自动发现非常类似,但是比自动发现更精确.因为自动注册,是在Agent上自定义元数据,然后Agent将元数据发送给server进行匹配,如果匹配一致,则进 ...

  3. zabbix自动化监控之自动注册

    自动注册与自动发现刚好相反,是zabbix agent主动联系zabbix server,最后由zabbix server将这些agent加到host里.活动的Zabbix agent可以自动注册到服 ...

  4. 【zabbix】自动注册,实现自动发现agent并添加监控(agent不需要任何配置)

    更新: 后来在实际使用中发现,与其使用zabbix自动注册,不如直接调用zabbix的api主动发起添加服务器的请求,这样就不需要在zabbixserver上配置host信息了.实现全自动.具体调用方 ...

  5. zabbix自动发现与自动注册、自定义监控

    一.自动发现与自动注册在上面的介绍中,我们演示了手动添加一台主机的方法,虽然简单,但是当要添加的主机非常多时,也将变得非常繁琐,那么有没有一种方法,可以实现主机的批量添加呢,这样就会极大的提高运维效率 ...

  6. zabbix-通过自动注册自动添加主机

    自动注册和自动发现可以实现一样的效果,就是自动添加符合条件的主机到监控,那跟自动发现有什么区别? 其实自动发现是由弊端的,上文也说到了,zabbix server是主动去扫描网段,寻找agent的,试 ...

  7. Zabbix--05 Grafana、percona、自动发现和自动注册

    目录 一. Grafana自定义图形 1.安装grafana 2.安装并激活zabbix插件 3.数据展示 4.自定义图形仪表盘 5.自定义图形饼图 二. percona模版监控mysql 1.安装p ...

  8. zabbix之自动注册,编写触发器:一定时间内超过某个负载值的时间

    zabbix中添加主机很多时可以考虑自动注册来自动添加,下面按照图片顺序来看,zabbix版本:3.0.28 超过负载30%的持续时间 创建触发器:

  9. Zabbix 自动发现 & 自动注册

    自动发现 Zabbix 为用户提供了高效灵活的网络自动发现功能,有以下优点: 加快 Zabbix 部署 简化管理 无需过多管理,也能在快速变化的环境中使用 Zabbix Zabbix 网络发现基于以下 ...

随机推荐

  1. INSPIRED启示录 读书笔记 - 第6章 招聘产品经理

    产品经理应有的特质 个人素质和态度:技术可以学习,素质却难以培养,有些素质是成功的产品经理必不可少的 对产品的热情:对产品有一种本能的热爱,是夜以继日克服困难.完善产品的动力 用户立场:能换位思考,能 ...

  2. leetcode刷题2:两数相加add_two_numbers

    题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...

  3. [cqoi2012]交换棋子

      2668: [cqoi2012]交换棋子 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1334  Solved: 518[Submit][Stat ...

  4. 格点多边形面积公式(Pick定理)的一个形象解释(转)

    Pick定理:如果一个简单多边形(以下称为“多边形”)的每个顶点都是直角坐标平面上的格点,则称该多边形为格点多边形.若一个面积为S的格点多边形,其边界上有a个格点,内部有b个格点,则S=a/2+b-1 ...

  5. setStyleSheet 一些QSS设置的集合

    setStyleSheet 设置的一些集合,一部分源码和截图来自 http://blog.sina.com.cn/s/articlelist_2801495241_0_1.html 1. 设置QLab ...

  6. 【转载】postgreSQL在linux中安装详解

    .编译环境 Linux: CentOS 5.5 gcc: 4.1.2 1. 安装PostgreSQL 1) 解压postgresql-9.1.7.tar.bz2 #tar jxvf postgresq ...

  7. review28

    前面介绍了指向文件的输入流和输出流.随机流是既能读文件也能写文件. RandomAccessFile类创建的流称做随机流,与前面的输入.输出流不同的是,RandomAccessFile类既不是Inpu ...

  8. spring:自定义限定符注解@interface, 首选bean

    spring:自定义限定符注解@interface, 首选bean 1.首选bean 在声明bean的时候,通过将其中一个可选的bean设置为首选(primary)bean能够避免自动装配时的歧义性. ...

  9. sql print

    这个因为你使用了varchar+int ,但是print只支持一种类型的输出,你要么通过转换函数将@no转换成字符类型,要么去掉@name.print '李勇' + convert(varchar, ...

  10. 目标检测 — NMS

    1.非极大值抑制步骤 非极大值抑制算法(Non-maximum suppression,NMS)在目标检测中经常用到.我们的检测算法可能对同一目标产生多次检测的结果,非极大值抑制算法可以保证每个目标只 ...