当前位置: 首页 > article >正文

Spring学习笔记_13——@Autowired

@Autowired

1. 介绍

@Autowired注解能够自动按照类型注入。

当IOC容器中有且仅有一个类型匹配时,使用@Autowired注解可以直接注入成功。

当超过一个类型匹配时,则使用变量名称(写在方法上就是方法名称)作为Bean的id,在符合类型的多个Bean中再次进行匹配,如果能匹配上就可以注入成功。如果匹配不上,是否报错要看required属性的取值。

  • 类型匹配: 默认情况下,@Autowired会基于类型进行自动装配。Spring 会在应用上下文中查找与目标类型相匹配的唯一 bean 来进行注入。如果找到多个相同类型的 bean,那么@Autowired将无法决定应该注入哪一个,除非你提供了额外的信息(如使用@Qualifier注解)来指定具体的 bean。
  • 名字匹配: 如果存在多个相同类型的 bean,你可以使用 @Qualifier 注解来指定具体要注入哪个 bean
  • 可选依赖: 有时你可能希望一个依赖是可选的,即如果没有找到合适的 bean,也不会抛出异常。这时可以结合 @Autowired@Nullable 注解来实现
  • 默认行为: 如果没有明确指定,Spring 会尝试通过构造器、setter 方法或字段来注入依赖。从 Spring 4.3 开始,如果你只有一个构造器,那么即使不使用 @Autowired 注解,Spring 也会默认使用该构造器进行注入

2. 场景

在开发过程中,将我们自己写的类注入到另一个类的字段、方法参数、方法、构造方法时,就可以使用@Autowired注解。

3. 源码

/**
 * @author Juergen Hoeller
 * @author Mark Fisher
 * @author Sam Brannen
 * @since 2.5
 * @see AutowiredAnnotationBeanPostProcessor
 * @see Qualifier
 * @see Value
 */
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
        // 表示是否必须注入成功,取值为true或false。默认值是true,表示必须注入成功。
        // 当取值为true时,注入不成功会报错,否则,注入不成功不会报错
	boolean required() default true;
}

4. 使用方式

  • 字段
@Autowired
private MyDependency myDependency;
  • 构造函数
private final MyDependency myDependency;

@Autowired
public MyClass(MyDependency myDependency) {
  this.myDependency = myDependency;
}
  • setter方法
private MyDependency myDependency

public void setMyDependency(MyDependency myDependency) {
  this.myDependency = myDependency;
}
  • 任意方法
public void configureSomething(MyDependency myDependency) {
   pass
}

http://www.kler.cn/a/374517.html

相关文章:

  • WPF+MVVM案例实战(十五)- 实现一个下拉式菜单(上)
  • 深度学习基础知识-Batch Normalization(BN)超详细解析
  • Linux RAID 技术详解:原理、配置、管理及故障处理
  • 【网络安全 | 漏洞挖掘】逻辑漏洞+无限制爆破实现业务瘫痪
  • 【原创分享】JVM服务调优实战
  • 新材料产业数据管理:KPaaS平台的创新驱动
  • 内网穿透技术选型PPTP(点对点隧道协议)和 FRP(Fast Reverse Proxy)
  • 手机功耗异常大数据看板建设
  • IMU技术引领骑行新体验
  • linux中网口测试
  • JVM—类加载器、双亲委派机制
  • git入门教程6:git基本版本控制
  • 中英文如何快速切换?小达人盘点10款翻译工具给你
  • 芯片技术创新,GPU 服务器厂家聚焦服务器性能新巅峰
  • Nuxt.js 应用中的 components:extend 事件钩子详解
  • CSS常用标签笔记
  • 详解汉明纠错码原理以及FPGA实现
  • Jetson Xavier nx在Ubuntu18.04下安装ros2 使用奥比中光330
  • Python+Appium+Pytest+Allure自动化测试框架-代码篇
  • springboot获取七牛云文件上传凭证token
  • 从二维图像到三维重建:由运动到结构(SfM)的完整流程推导【含数学原理及推导】
  • 基于STM32+华为云IOT设计的大棚育苗管理系统
  • Java 反射
  • 图论BFS
  • 微信小程序之流浪动物救助:爱与希望同行
  • 【SQL】 Navicate 17 连接sql server