Spring注解之@Autowired组件装配
前言
说起Spring的@Autowired注解,想必大家已经耳熟能详;对于小编而言,虽然一直知道怎么用,但是并没有去了解过,因此,本文就梳理一下@Autowired注解的功能,如有写的不准确的地方,欢迎各位园友拍砖。
@Autowired:属于Spring 的org.springframework.beans.factory.annotation包,通过byType形式,可用于为类的属性、构造器、方法注入所需的外部资源。@Resource:不属于spring的注解,而是来自于JSR-250位于java.annotation包下,使用该注解为目标bean指定协作者Bean。@Inject:和@Autowired注解一样也是按类型注入的bean,但是没有required属性。
注:此篇博文基于Spring5.1.10.RELEASE,SpringBoot2.1.9.RELEASE
@Autowired源码
我们看一下@Autowired注解的源码:
package org.springframework.beans.factory.annotation; import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired { /**
* Declares whether the annotated dependency is required.
* <p>Defaults to {@code true}.
*/
boolean required() default true; }
可以看到,此注解运行时生效,且适用范围很广,例如,成员变量、方法、setter方法和构造函数等都可以加上@Autowired注解。它还有一个属性required,此属性用于控制在找不到要依赖注入的对象时是否报错,默认true即找不到要注入的对象时会报错。
当IOC容器里存在多个类型兼容的bean时(例如,同一个接口的不同实现类),通过类型的自动装配将无法工作,此时可以在@Qualifiter注解里提供bean的名称,Spring允许对方法的入参标注@Qualifiter以指定注入bean的名称;此时,@Autowired + @Qualifiter = @Resource。
在同一个类中,同一类型的bean可以使用@Autowired注入多次,并且所有注入的实例都是同一个实例:
@Autowired
private Student stu1; // 一个实体类
@Autowired
private Student stu2; public boolean isSameInstatnce() {
System.err.println(stu2 + " 111");
System.err.println(stu1);
return stu2.getClass().equals(stu1.getClass());
}
调用上面的接口之后,将输出同一实例。

题外话,实体类Student切勿重写toString()方法,避免控制台打印toString()里的内容,而非默认的[getClass().getName() + "@" + Integer.toHexString(hashCode())]。
Spring注解之@Autowired组件装配的更多相关文章
- Spring注解之@Autowired、@Qualifier、@Resource、@Value
前言 @Autowired.@Qualifier.@Resource.@Value四个注解都是用于注入数据的,他们的作用就和在xml配置文件中的bean标签中写一个标签的作用是一样的!本篇中特别要讲解 ...
- Spring注解开发系列Ⅴ --- 自动装配&Profile
自动装配: spring利用依赖注入和DI完成对IOC容器中各个组件的依赖关系赋值.自动装配的优点有: 自动装配可以大大地减少属性和构造器参数的指派. 自动装配也可以在解析对象时更新配置. 自动装配的 ...
- Spring框架使用@Autowired自动装配引发的讨论
问题描述 有同事在开发新功能测试时,报了个错,大致就是,在使用 @Autowired 注入时,某个类有两个bean,一个叫a,一个叫b. 一般这种情况应该声明注入哪个bean,他没有声明,他不知道这个 ...
- 【Spring注解开发】组件注册-使用@Configuration和@Bean给容器中注册组件
写在前面 在之前的Spring版本中,我们只能通过写XML配置文件来定义我们的Bean,XML配置不仅繁琐,而且很容易出错,稍有不慎就会导致编写的应用程序各种报错,排查半天,发现是XML文件配置不对! ...
- Spring注解之@Autowired
前言 说起Spring的@Autowired注解,想必大家已经熟悉的不能再熟悉了.本文就针对此最常用的注解,梳理一下它的功能和原理,争取从源码的角度将此注解讲通,如有写的不准确的地方,欢迎各位园友拍砖 ...
- Spring注解开发系列Ⅰ--- 组件注册(上)
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...
- Spring注解开发系列Ⅱ --- 组件注册(下)
1.@Import注册组件 @Import主要功能是通过导入的方式实现把实例加入springIOC容器中, /** * 给容器注册组件 * 1.包扫描+组件标注注解(@Controller,@Serv ...
- spring 注解@Resource @Autowired区别
1.@Autowired寻找类的时候默认是ByType,也就是通过类的类型来寻找类.不过,也可以通过借助@Qualifier("name")来指定寻找的类名 @Autowired ...
- 【Spring注解驱动开发】使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?
写在前面 [Spring专题]停更一个多月,期间在更新其他专题的内容,不少小伙伴纷纷留言说:冰河,你[Spring专题]是不是停更了啊!其实并没有停更,只是中途有很多小伙伴留言说急需学习一些知识技能, ...
- 浅尝Spring注解开发_自定义注册组件、属性赋值、自动装配
Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含自定义扫描组件.自定义导入组件.手动注册组件.自动注入方法和参数.使用Spring容器底层组件等 配置 @Confi ...
随机推荐
- 【Ryan】: linux下挂在共享文件夹
点击查看代码 $ vmware-hgfsclient $ sudo vmhgfs-fuse .host:/ /mnt -o allow_other
- 如何在 Github 上获得 1000 star?
作为程序员,Github 是第一个绕不开的网站.我们每天都在上面享受着开源带来的便利,我相信很多同学也想自己做一个开源项目,从而获得大家的关注.然而,理想很丰满,现实却是开发了很久的项目仍然无人问津. ...
- ORACLE物理文件存储位置查询语句
在进行备份和恢复的时候,我们需要知道一些关于ORACLE物理文件存储的信息,这样我们才能判断我们所进行的备份是否完整.一个完整的备份需要包括的物理文件:控制文件联机重做日志文件归档日志文件数据文件因此 ...
- Docker镜像(image)详解
如果曾经做过 VM 管理员,则可以把 Docker 镜像理解为 VM 模板,VM 模板就像停止运行的 VM,而 Docker 镜像就像停止运行的容器:而作为一名研发人员,则可以将镜像理解为类(Clas ...
- [源码系列:手写spring] IOC第十节:bean的初始化和销毁方法
内容介绍 在Spring框架中,你可以使用以下几种方法定义bean的初始化和销毁: 使用注解方式: @PostConstruct:在bean的方法上添加@PostConstruct注解,该方法将在be ...
- 【教程】C语言入门
C语言入门 首先导入头文件 #include<stdio.h> 接下来编写主函数 #include<stdio.h> int main() { retuen 0; } 最后,在 ...
- 未给任务“SignFile”的所需参数“CertificateThumbprint”赋值.
问题重现 一个项目发布时错误如下错误: 解决方法 打开项目属性-签名 方式一 [取消勾选]为 ClickOnce 清单签名 - 简单粗暴 方式二 [勾选]为 ClickOnce 清单签名 创建测试证书 ...
- JBoltAI 与 AIGS 的深度融合:重构企业数智化未来
在企业数智化转型浪潮中,JBoltAI 凭借其独特的 AIGS(AI Generate Service)解决方案,正成为连接大模型能力与企业实际需求的桥梁.其核心价值在于通过技术框架的重构,将 AI ...
- python获取指定文件夹内文件名称
比如下图,文件夹内有若干文件,且文件夹路径:C:\Users\Administrator\Desktop\2147\1024 4行代码,解决问题 import os path = "C:\\ ...
- Nacos简介—3.Nacos的配置简介
大纲 1.Nacos生产集群Web端口与数据库配置 2.Nacos生产集群的Distro协议核心参数 3.Nacos打通CMDB实现跨机房的就近访问 4.Nacos基于SPI动态扩展机制来获取CMDB ...