@Autowired自动装配!!!
在不使用xml配置文件时,@Autowired是我们使用最多的注解之一,关于该注解的原理如下:
@Autowired原理:在启动springIoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性。
在使用@Autowired时,首先在容器中查询对应类型的bean
    如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据(byType)
    如果查询的结果不止一个,那么@Autowired会根据名(byName)称来查找。
    如果查询的结果为空,那么会抛出异常。解决方法时,使用@Autowired(required=false)
而关于@Autowired的用法,我总结了一下三点:

1.用在字段上
@Autowired用在字段上时,表示Spring会对改字段进行匹配赋值,在Spring容器中查找(byType),找到能匹配到该字段的对象,然后进行赋值;如果未找到就爆出异常,可以指定required=false允许字段值为null解决报错。

2.用在set方法上
@Autowired用在字段上时,会找到改set方法对应的字段,然后其过程与其一致。

3.用在构造方法上
@Autowired用在构造方法上时,会找到改构造方法对应的所有字段,然后其过程与字段一致。

4. byName or byType?
我们在进行项目开发时,会经常写这样的代码:

@Autowired
private Service service;

值得注意的是,Service 普遍写法是一个接口,而@Autowired进行属性赋值时必定是该接口的实现类,但我们不能保证该接口只有一个实现类,也就是说@Autowired自动注入到底是哪一个实现类?
下面是关于byName or byType的解释:

byName:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。
byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean,则什么事都不发生,也可以通过设置

由此可见,@Autowired默认使用的是byType类型,但是对于多个实现类的情况下,@Autowired又支持再次通过byName进行识别,也就是说:

@Autowired
private Service service1;
@Autowired
private Service service2;

注入的是不同的两个实现类,当然前提是他们都实现了共同的接口Service
除此之外,我们还可以通过@Qualified注解来指定实现类,以此规避多个实现类的情况。
代码如下:

@Autowired
@Qualified("service1")
private Service service;
//当然,一个类中不能存在同名的成员属性
@Autowired
@Qualified("service2")
private Service service;

@Autowired自动装配相关推荐

  1. @Autowired自动装配对象和new对象的区别

    @Autowired自动装配对象和new对象的区别 @Autowired相当于setter,在注入之前,对象已经实例化,是在这个接口注解的时候实例化的:  而new只是实例化一个对象,而且new的对象 ...

  2. Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)

    http://moshowgame.iteye.com/blog/1607718 @Autowired自动装配 上面的例子我们用的都是手动装配的,如果DAO-Service一多那就很麻烦了,那么我们需 ...

  3. Spring容器父子类继承关系交给spring容器管理采用@autowired自动装配分析

    第一个青春是上帝给的 第二个的青春是靠自己努力的. 在开发项目过程中开发者们可能会遇到这样的问题 @autowired自动装配模式的工作模式是:在springIOC定位所有的Bean后,这个字段需要按 ...

  4. spring security 注解_Spring框架使用@Autowired自动装配引发的讨论

    原文首发于掘金 作者:walkinger 链接:https://juejin.im/post/5d4163ede51d4561f64a078b 问题描述 有同事在开发新功能测试时,报了个错,大致就是, ...

  5. @Autowired自动装配及原理

    使用Autowired装配属性时,当容器在扫描中扫描到@Autowired时,就会在IOC容器中自动的查找到需要的Bean对象(先按照类型进行装配).当查询结果是一个的时候,就会直接进行装配.当查询的 ...

  6. 【Spring第五篇】Autowired:自动装配

    Autowired:自动装配 要使用注解,首先必须开启注解支持,再beans.xml中添加以下字段 <!-- 开启注解的支持--><context:annotation-config ...

  7. spring系列-注解驱动原理及源码-自动装配

    目录 一.spring规范的bean自动注入 1.使用@Autowired自动注入 2.使用@Qualifier指定需要装配的组件 3.使用@Autowired装配null对象 4.使用@Primar ...

  8. Spring(三)——HelloSpring、IOC创建对象的方式、属性注入、自动装配、使用注解开发

    文章目录 1. 简介 2. IOC理论推导 3. HelloSpring 4. IOC创建对象的方式 4.1 使用无参构造创建对象(默认) 4.2 使用有参构造创建对象 5. Spring配置 5.1 ...

  9. Spring之 Bean的自动装配

    什么是Spring Bean的自动装配? 自动装配是Spring满足bean依赖一种方式 Spring会在上下文种自动寻找,并自动给bean装配属性 Spring种有三种装配方式 1.在xml种显示配 ...

最新文章

  1. Tablayout 多个界面使用一个fragment 的实例
  2. java collection 用法_Java中Collection接口的用法
  3. python不小心用关键字做了变量名,怎么改回来
  4. python字典类型实现的键值对的映射_python数据类型-映射和集合-字典
  5. Git根据文件名字查询修改文件内容
  6. 只用html5与CSS做一个简单的页面,HTML+CSS基础训练之做一个简单页面的布局
  7. firewall防火墙
  8. vue全局路由守卫beforeEach
  9. 看似毫无规律的各种现象
  10. jQuery原理第四天
  11. UI设计师一定要懂的专业名词
  12. Android开发笔记(一百三十六)可折叠工具栏布局CollapsingToolbarLayout
  13. (oracle)八、表
  14. 使用缓冲字符流BufferedReader和文件字符流FileReader读取文本文件
  15. WD西部数据2TB,2.5寸移动硬盘,因为磁头坏了,长时间通电导致划片划伤,维修过程通过反复更换磁头
  16. cesium 粒子特效
  17. wordpress如何给文章添加浏览量,使用插件WP-PostViews
  18. 如履薄冰:Redis 懒惰删除的巨大牺牲
  19. Spreadtrum_Android_8805和8810环境搭建和源码编译V1.0.1_Word文档
  20. 【模拟电子技术基础】本章讨论问题答案2

热门文章

  1. ABtest实验原理、流程、应用以及面试常问问题。
  2. SAS ARMA模型拟合预测
  3. ant vue 表格项上下移动功能
  4. 分析:对QQ、ICQ发展前景的判断
  5. 树莓派-无屏幕安装官方系统及配置
  6. 【云原生】Apache Livy on k8s 讲解与实战操作
  7. python 开区间 闭区间 理解
  8. 苹果读屏技术--VoiceOver
  9. 瑞萨——离线烧录器使用方法
  10. docker容器找到挂载的目录,以及服务器对应物理地址