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. Spring(二)-生命周期 + 自动装配(xml) +自动装配(注解)

    1.生命周期 **Spring容器的 bean **的生命周期: 1.1 默认生命周期 1.1.1 生命周期 调用构造方法,创建实例对象: set方法,给实例对象赋值: init 初始化方法 初始化对 ...

  2. 【译】Spring 4 自动装配、自动检测、组件扫描示例

    前言 译文链接:http://websystique.com/spring/spring-auto-detection-autowire-component-scanning-example-with ...

  3. 一步步从Spring Framework装配掌握SpringBoot自动装配

    目录 Spring Framework模式注解 Spring Framework@Enable模块装配 Spring Framework条件装配 SpringBoot 自动装配 本章总结 Spring ...

  4. spring的自动装配,骚话@Autowired的底层工作原理

    前言 开心一刻 十年前,我:我交女票了,比我大两岁.妈:不行!赶紧分! 八年前,我:我交女票了,比我小两岁,外地的.妈:你就不能让我省点心? 五年前,我:我交女票了,市长的女儿.妈:别人还能看上你?分 ...

  5. Spring Boot之从Spring Framework装配掌握SpringBoot自动装配

    Spring Framework模式注解 模式注解是一种用于声明在应用中扮演“组件”角色的注解.如 Spring Framework 中的 @Repository 标注在任何类上 ,用于扮演仓储角色的 ...

  6. 【Spring】Spring中的Bean - 5、Bean的装配方式(XML、注解(Annotation)、自动装配)

    Bean的装配方式 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 文章目录 Bean的装配方式 基于XML的装配 基于注解 ...

  7. 6、Spring教程之自动装配

    自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean有三种装配机制,分别是: 在xml中显式配置 ...

  8. Spring学习03(Bean的自动装配)

    6.Bean的自动装配 6.1 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean的三种装配机 ...

  9. 深度剖析Spring Boot自动装配机制实现原理

    在前面的分析中,Spring Framework一直在致力于解决一个问题,就是如何让bean的管理变得更简单,如何让开发者尽可能的少关注一些基础化的bean的配置,从而实现自动装配.所以,所谓的自动装 ...

随机推荐

  1. ctags-vim代码间快速跳转

    ctags-vim代码间快速跳转 1.说明 在Linux环境下使用vim进行驱动程序编写和维护的时候,会经常需要调用Linux内核的函数或宏定义,在驱动程序和kernel代码之间频繁跳转是件很繁琐的事 ...

  2. Ipad弹出UIAlertControllerStyleActionSheet时发生崩溃

    pad弹出UIAlertControllerStyleActionSheet时,在iphone上运行正常,但在ipad上崩溃,解决代码如下: UIAlertController *alertVc = ...

  3. Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Fi ...

  4. tp中like多字段同时怎么模糊搜索

    例如 select * from tbl where a like '%123%' or b like '%123%' or c like '%123%' ;实现这样的功能,thinkphp怎么写呢? ...

  5. Webpack3.0入门指南

    前言 本文是基于我厂基友的Webpack学习系列(一)初学者使用教程 这篇文章做构建.可能基友的文章是基于Mac环境,我是windows环境,在学习时遇到了很多坑,询问基友,他让我搞个基于window ...

  6. thinkphp5.0 微信公众号接入支付宝支付

    ---恢复内容开始--- 真是无力吐槽这个需求了,想骂客户,好端端的非要在微信公众号接入支付宝,都知道微信公众号是拒绝支付宝的,屏蔽了支付宝,所以在微信公众号接入支付宝的话就必须手动复制链接跳出微信内 ...

  7. java进阶书籍

    1.<深入理解Java虚拟机:JVM高级特性与最佳实践> 2.<HotSpot实战> 3.<Java并发编程实战> Brian Goetz 4. <Java多 ...

  8. 酷狗歌曲缓存kgtemp转mp3工具

    一直用网易音乐听歌,不过网易的歌曲版权确实是少了一些,在酷狗上可以找到,但收费歌曲只能试听不能下载. 寻找方案 从设置里可以看出,酷狗会设置缓存目录,试听的歌曲存放到这个缓存里. 打开缓存目录: 可以 ...

  9. Cocos2d-x 3.0 Android改动APK名、更改图标、改动屏幕方向、改动版本,一些须要注意的问题

    非常多新手程序员做出一个游戏后,编译成apk安装在手机上.却发现安装程序名和游戏图标都是Cocos2dx默认的,并且默认屏幕方向是横向.那么须要怎么才干改动为自己想要的呢? 打开你创建的project ...

  10. Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码

    Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码 左右側滑效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a ...