@Autowired自动装配
@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自动装配相关推荐
- @Autowired自动装配对象和new对象的区别
@Autowired自动装配对象和new对象的区别 @Autowired相当于setter,在注入之前,对象已经实例化,是在这个接口注解的时候实例化的: 而new只是实例化一个对象,而且new的对象 ...
- Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)
http://moshowgame.iteye.com/blog/1607718 @Autowired自动装配 上面的例子我们用的都是手动装配的,如果DAO-Service一多那就很麻烦了,那么我们需 ...
- Spring容器父子类继承关系交给spring容器管理采用@autowired自动装配分析
第一个青春是上帝给的 第二个的青春是靠自己努力的. 在开发项目过程中开发者们可能会遇到这样的问题 @autowired自动装配模式的工作模式是:在springIOC定位所有的Bean后,这个字段需要按 ...
- spring security 注解_Spring框架使用@Autowired自动装配引发的讨论
原文首发于掘金 作者:walkinger 链接:https://juejin.im/post/5d4163ede51d4561f64a078b 问题描述 有同事在开发新功能测试时,报了个错,大致就是, ...
- @Autowired自动装配及原理
使用Autowired装配属性时,当容器在扫描中扫描到@Autowired时,就会在IOC容器中自动的查找到需要的Bean对象(先按照类型进行装配).当查询结果是一个的时候,就会直接进行装配.当查询的 ...
- 【Spring第五篇】Autowired:自动装配
Autowired:自动装配 要使用注解,首先必须开启注解支持,再beans.xml中添加以下字段 <!-- 开启注解的支持--><context:annotation-config ...
- spring系列-注解驱动原理及源码-自动装配
目录 一.spring规范的bean自动注入 1.使用@Autowired自动注入 2.使用@Qualifier指定需要装配的组件 3.使用@Autowired装配null对象 4.使用@Primar ...
- Spring(三)——HelloSpring、IOC创建对象的方式、属性注入、自动装配、使用注解开发
文章目录 1. 简介 2. IOC理论推导 3. HelloSpring 4. IOC创建对象的方式 4.1 使用无参构造创建对象(默认) 4.2 使用有参构造创建对象 5. Spring配置 5.1 ...
- Spring之 Bean的自动装配
什么是Spring Bean的自动装配? 自动装配是Spring满足bean依赖一种方式 Spring会在上下文种自动寻找,并自动给bean装配属性 Spring种有三种装配方式 1.在xml种显示配 ...
最新文章
- Tablayout 多个界面使用一个fragment 的实例
- java collection 用法_Java中Collection接口的用法
- python不小心用关键字做了变量名,怎么改回来
- python字典类型实现的键值对的映射_python数据类型-映射和集合-字典
- Git根据文件名字查询修改文件内容
- 只用html5与CSS做一个简单的页面,HTML+CSS基础训练之做一个简单页面的布局
- firewall防火墙
- vue全局路由守卫beforeEach
- 看似毫无规律的各种现象
- jQuery原理第四天
- UI设计师一定要懂的专业名词
- Android开发笔记(一百三十六)可折叠工具栏布局CollapsingToolbarLayout
- (oracle)八、表
- 使用缓冲字符流BufferedReader和文件字符流FileReader读取文本文件
- WD西部数据2TB,2.5寸移动硬盘,因为磁头坏了,长时间通电导致划片划伤,维修过程通过反复更换磁头
- cesium 粒子特效
- wordpress如何给文章添加浏览量,使用插件WP-PostViews
- 如履薄冰:Redis 懒惰删除的巨大牺牲
- Spreadtrum_Android_8805和8810环境搭建和源码编译V1.0.1_Word文档
- 【模拟电子技术基础】本章讨论问题答案2