spring中常见的自动注入方式

devtools/2025/1/8 4:23:41/

在Spring框架中,自动注入(Autowiring)是依赖注入(Dependency Injection, DI)的一种形式,它允许Spring容器自动解析并装配协作对象之间的依赖关系。Spring提供了多种自动注入的方式,下面是几种最常见的方式:

  1. 基于构造器的注入(Constructor-based Autowiring)
    构造器注入是通过类的构造函数来注入依赖项。这是推荐的做法,特别是对于必需的依赖项,因为它确保了对象创建时所有必需的依赖都已就绪。

    @Autowired
    public MyClass(MyService myService) {this.myService = myService;
    }
    
  2. 基于字段的注入(Field-based Autowiring)
    字段注入是在类的字段上直接使用@Autowired注解。这种方式简洁但不推荐用于必需的依赖项,因为这会使单元测试更难,并且违反了面向对象编程中的封装原则。

    @Autowired
    private MyService myService;
    
  3. 基于Setter方法的注入(Setter-based Autowiring)
    Setter注入是通过提供一个或多个setter方法来设置依赖项。这种方式适用于可选依赖项,以及需要对依赖项进行修改的情况。

    @Autowired
    public void setMyService(MyService myService) {this.myService = myService;
    }
    
  4. 基于接口或类型的注入(Type-based or Interface-based Autowiring)
    当有多个bean实现了同一个接口时,可以使用限定符(@Qualifier)来指定要注入的具体bean。此外,还可以使用@Primary注解标记一个主要的bean,当有多个候选者时优先选择它。

    @Autowired
    @Qualifier("specificBeanName")
    private MyService myService;
    
  5. 基于名称的注入(Name-based Autowiring)
    使用@Autowired结合@Qualifier可以根据bean的名字来注入特定的bean实例,而不是依赖类型。

    @Autowired
    @Qualifier("myServiceBeanName")
    private MyService myService;
    
  6. @Resource@Inject 注解
    除了@Autowired外,Spring还支持Java EE的@Resource和JSR-330标准的@Inject注解来进行依赖注入。@Resource通常是根据名字查找bean,而@Inject则类似于@Autowired的行为。

选择哪种自动注入方式取决于具体的应用场景和个人偏好。构造器注入被广泛认为是最好的实践,因为它有助于创建不可变对象,并使依赖关系更加明确。字段注入虽然方便,但对于单元测试来说可能不够友好。而对于可选依赖或后期绑定的场景,Setter注入可能是更好的选择。


http://www.ppmy.cn/devtools/148315.html

相关文章

Hypium纯血鸿蒙系统 HarmonyOS NEXT自动化测试框架

1、什么是Hypium Hypium是华为官方为鸿蒙操作系统开发的一款以python为语言的自动化测试框架。 引用华为官网介绍如下: DevEco Testing Hypium(以下简称Hypium)是HarmonyOS平台的UI自动化测试框架,支持开发者使用python语言为应用编写UI自动化测试脚本…

【2024年-12月-18日-开源社区openEuler实践记录】openeuler - jenkins:开源项目持续集成与交付的幕后引擎

开篇介绍 大家好,我是 fzr123,热衷于挖掘那些能为开源项目高效运转“添柴加薪”的关键工具,今天要带大家全面剖析openeuler - jenkins。在开源生态蓬勃发展,项目迭代速度不断加快的当下,它宛如一位不知疲倦的“幕后工…

使用Clion在ubuntu上进行交叉编译,并在Linux上远程编译五子棋

目录 1.工具以及概念介绍 (1)Clion软件简介 (2)交叉编译 (3)远程编译 2.操作原理 3.详细操作步骤 (1)配置Clion与虚拟机ubuntu的ssh连接 CLion远程开发Ubuntu,并显…

vscode如何离线安装插件

在没有网络的时候,如果要安装插件,就会麻烦一些,需要通过离线安装的方式进行。下面记录如何在vscode离线安装插件。 一、下载离线插件 在一台能联网的电脑中,下载好离线插件,拷贝到无法联网的电脑上。等待安装。 vscode插件商店地址:https://marketplace.visualstudio.co…

Nginx——服务器端集群搭建与扩展模块(五/五)

目录 1.Nginx实现服务器端集群搭建1.1.Nginx 与 Tomcat 部署1.1.1.环境准备 (Tomcat)1.1.2.环境准备 (Nginx) 1.2.Nginx实现动静分离1.2.1.概述1.2.2.需求分析1.2.3.动静分离实现步骤 1.3.Nginx 实现 Tomcat 集群搭建1.4.Nginx 高可用解决方案1.4.1.概述1.4.2.Keepalived 介绍1…

【人工智能】基于Python与OpenCV构建简单车道检测算法:自动驾驶技术的入门与实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着自动驾驶技术的快速发展,车道检测作为自动驾驶系统中的一个重要组成部分,起着至关重要的作用。本文将介绍如何利用Python与OpenCV库构…

【开源】创建自动签到系统—QD框架

1. 介绍 QD是一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。 主要通过抓包获取到HAR来制作任务模板,从而实现异步响应和发起HTTP请求 2. 需要环境 2.1 硬件需求 CPU:至少1核 内存:推荐 ≥ 1G 硬盘:推…

java实验6 J.U.C并发编程

实验6 J.U.C并发编程 要求: 1)严禁上网抄袭、互相抄袭和各种形式的抄袭(如代码抄袭,运行截图一图多用),一旦发现单次作业按零分处理! 2)课程报告正文内容基本格式为:…