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())]。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2018-07-11 java怎么实现统计一个字符串中字符出现的次数