返回顶部
首页 > 资讯 > 后端开发 > Python >你知道Spring中为何不建议使用字段注入吗
  • 636
分享到

你知道Spring中为何不建议使用字段注入吗

2024-04-02 19:04:59 636人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

在使用idea中通过注解注入字段时是否遇见过这样一个提示: Field injection is not recommended(不推荐使用字段注入) 一. 什么是字段注入,sp

在使用idea中通过注解注入字段时是否遇见过这样一个提示:

Field injection is not recommended(不推荐使用字段注入)

一. 什么是字段注入,spring中依赖注入的方式有哪些?

在Spring中依赖注入有三大类:字段注入、构造器注入、Setter方法注入。

字段注入是将Bean作为字段注入到类中,也是最方便,用的最多的注入方式。

二. 官方为什么不推荐使用字段注入

 首先来看字段注入


@RestController
public class TestHandleController {

    @Autowired
    TestHandleService testHandleService;

    public void helloTestService(){
        testHandleService.hello();
    }
}

字段注入的非常的简便,通过以上代码我们就可以轻松的使用TestHandleService类,但是如果变成下面这样呢:


TestHandleController testHandle = new TestHandleController();
testHandle.helloTestService();

这样执行结果为空指针异常,这就是字段注入的第一个问题:对象的外部可见性,无法在容器外部实例化TestHandleService,类和容器的耦合度过高,无法脱离容器访问目标对象。

接下来看第二段代码:


public class TestA(){

    @Autowired
    private TestB testB;

}

public class TestB(){

    @Autowired
    private TestA testA;

}

这段代码在idea中不会报任何错误,但是当你启动项目时会发现报错,大致意思是:创建Bean失败,原因是当前Bean已经作为循环引用的一部分注入到了其他Bean中。

这就是字段注入的第二个问题:可能导致循环依赖

字段注入还有第三个问题:无法设置注入的对象为final,也无法注入静态变量,原因是变量必须在类实例化进行初始化。

整理一下,字段注入可能引起的三个问题:

1. 对象的外部可见性

2. 可能导致循环依赖

3. 无法设置注入的对象为final,也无法注入静态变量

 接下来看构造器注入--官方推荐的注入方式

使用形式也很简单:


private TestHandleService testHandleService;

@Autowired
public TestHandleController(TestHandleService testHandleService){
    this.testHandleService = testHandleService;
}

通过构造器的方式将Bean注入到字段中。

构造器注入能够保证注入的组件不可变,并且确保需要的依赖不为空。

这样就可以将变量设置为final,并且传递的肯定是一个对象,避免出现空指针异常。

若是出现字段注入中循环依赖的问题,在项目启动时Spring会非常形象的将错误抛出来:

Description:

The dependencies of some of the beans in the application context fORM a cycle:

testContrtoller (field private com.example.designstudy.service.TestService com.example.designstudy.controller.TestContrtoller.testService)
┌─────┐
| testService defined in file [D:\design-study\target\classes\com\example\designstudy\service\TestService.class]
↑ ↓
| testHandleServiceImpl defined in file [D:\design-study\target\classes\com\example\designstudy\service\impl\TestHandleServiceImpl.class]
└─────┘

显而易见的发现错误的地方。

由此可见,字段注入的三大问题都能解决,但是构造器注入就没有其他问题了吗?

答案肯定是否定的,当依赖的对象很多时,需要严格按照构造器的顺序去填写依赖的对象,这将导致代码可读性和可维护性变得很差。

这时候可以引入Setter方法进行注入,Setter方法和构造器注入很像,不过Setter更具有可读性。

并且使用Setter方法注入可以实现按需注入,不使用的对象不需要想构造器注入一样强制注入。

总结一下三种注入方式:

构造器注入适用于强制对象注入

Setter注入适合可选对象注入

字段注入方式应该尽量避免,因为对象无法脱离容器独立运行(话虽这么说,但我还是字段注入用得多,因为方便啊 [/狗头])

总结

到此这篇关于为何不建议使用字段注入的文章就介绍到这了,更多相关Spring不建议使用字段注入内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 你知道Spring中为何不建议使用字段注入吗

本文链接: https://lsjlt.com/news/133414.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 你知道Spring中为何不建议使用字段注入吗
    在使用Idea中通过注解注入字段时是否遇见过这样一个提示: Field injection is not recommended(不推荐使用字段注入) 一. 什么是字段注入,Sp...
    99+
    2024-04-02
  • 你知道如何在ASP中使用HTTP协议吗?
    ASP(Active Server Pages)是一种基于服务器端脚本技术的web开发语言,它可以与HTTP协议相结合,实现与客户端的交互。在ASP中使用HTTP协议可以使我们更好地处理客户端与服务器端之间的通信。本文将介绍如何在ASP中使...
    99+
    2023-10-22
    开发技术 ide http
  • 你知道如何在 Spring 中使用 ASP 函数吗?
    Spring 是一个流行的 Java 开发框架,它提供了各种功能和工具来简化开发过程。其中,ASP 函数是 Spring 中一个非常有用的功能,它可以帮助我们快速地实现一些常见的数据操作。 ASP 函数是 Spring 框架中的一个核心功能...
    99+
    2023-09-05
    函数 spring git
  • 你知道如何在 PHP 和 JavaScript 中使用 Spring 构建 RESTful API 吗?
    在当今的互联网时代,RESTful API 已经成为了开发者们构建 Web 应用程序的标准之一。而 Spring 框架又是一个非常流行的开发框架,它提供了一系列的工具和技术,可以帮助开发者更加高效地构建 RESTful API。本文将介绍如...
    99+
    2023-11-03
    javascript spring api
  • 你知道如何在Spring框架中使用Java函数吗?
    Spring框架是目前应用较广泛的Java开发框架之一。它提供了许多方便的功能和工具,使得Java开发变得更加高效和便捷。在Spring框架中,我们可以使用Java函数来实现一些常见的操作,如数据处理、业务逻辑处理等。本文将介绍如何在Spr...
    99+
    2023-09-16
    函数 spring 框架
  • 你知道如何使用 Go 在 Spring 中索引函数吗?
    在现代软件开发中,使用多种编程语言的组合来构建完整的系统已经成为了一种趋势。如果你是一个 Java 开发者,你可能会想使用 Go 来编写一些高性能的组件。在本文中,我们将讨论如何在 Spring 中使用 Go 索引函数。 在 Spring ...
    99+
    2023-10-11
    索引 spring 函数
  • 你知道如何在Bash中优雅地使用Spring框架吗?
    当谈到Java开发时,Spring框架一直是最流行的框架之一。它可以帮助开发人员更快、更简单地构建应用程序。在本文中,我们将介绍如何在Bash中优雅地使用Spring框架。 首先,让我们看一下如何在Bash中安装Spring框架。您可以使用...
    99+
    2023-09-10
    npm bash spring
  • 你知道如何在ASP中使用关键字索引吗?
    当今互联网时代,信息爆炸性增长,如何高效地查找信息,成为了我们面临的挑战。而关键字索引技术,就是一种高效的信息查找方式。在ASP中,我们也可以使用关键字索引技术,实现快速的信息查找。本文将为你详细介绍如何在ASP中使用关键字索引技术。 一、...
    99+
    2023-09-26
    并发 关键字 索引
  • 你知道如何在Go中使用Git吗?
    Go是一种非常流行的编程语言,它的简洁、高效、安全和易于学习的特点让它成为了许多开发者的选择。Git则是一种非常强大的版本控制系统,它可以让我们更加方便地管理代码。那么,你知道如何在Go中使用Git吗?本文将为你详细介绍。 一、安装Git ...
    99+
    2023-11-15
    git 索引 并发
  • 你知道如何使用Go和Django创建API吗?
    当今的互联网世界中,API是非常重要的一部分,它可以帮助我们快速地开发应用程序,而且可以让我们的应用程序更加灵活和可扩展。在本文中,我们将介绍如何使用Go和Django来创建API,帮助您更好地掌握API的基本知识。 Go是一种开源的编程语...
    99+
    2023-09-03
    django git api
  • 你知道如何在Java中记录日志,使用Spring和Bash吗?
    当我们开发一个大型的Java应用程序时,我们需要记录应用程序的运行信息,以便后续的调试和分析。Java提供了一个标准的日志框架——Java Logging API,它可以记录应用程序的日志信息。在这篇文章中,我们将介绍如何在Java中记录日...
    99+
    2023-06-21
    日志 spring bash
  • 你知道如何在 PHP 中使用 NPM 加载关键字吗?
    如何在 PHP 中使用 NPM 加载关键字 作为 PHP 开发人员,你可能会遇到需要使用 JavaScript 库和框架的情况。虽然 PHP 自身提供了很多功能,但是有时候我们需要借助其他语言的库来完成一些特定的任务。在这种情况下,NPM ...
    99+
    2023-11-09
    load 关键字 npm
  • 你知道如何在Java IDE中使用Bash吗?
    在现代软件开发中,Java是一种极其流行的编程语言。Java开发人员经常使用Java集成开发环境(IDE)来编写、调试和测试Java代码。同时,Bash是一种流行的Unix shell,它提供了强大的命令行工具和脚本语言。虽然Java开发...
    99+
    2023-06-17
    ide bash javascript
  • 你知道如何在Laravel中使用对象吗?
    Laravel是一种流行的PHP Web应用程序框架,它提供了一系列的工具和服务来帮助开发者快速构建高质量的Web应用程序。在Laravel中,对象是一种非常重要的概念。本文将介绍如何在Laravel中使用对象。 在Laravel中,对象是...
    99+
    2023-09-25
    编程算法 laravel 对象
  • vue项目中如何使用mock你知道吗
    目录第一步:第二步,在request.js中进行相关配置,request.js代码如下:第三步,在mock.js中进行相关配置,mock.js代码如下:第四步,在main.js中需引...
    99+
    2024-04-02
  • 你知道如何在 Go 中使用数组吗?
    当我们编写程序时,经常需要使用到数组。在 Go 语言中,数组是一种简单而强大的数据结构,它可以存储一组相同类型的数据。在本文中,我们将探讨如何在 Go 中使用数组。 声明数组 在 Go 中,声明数组的语法如下: var a [5]int...
    99+
    2023-08-18
    开发技术 数组 关键字
  • 你知道如何在Java分布式系统中使用Spring函数吗?
    Java分布式系统是目前应用最广泛的分布式系统之一,而Spring函数作为一种新兴的编程模型,可以为Java分布式系统的开发带来很多便利。本文将介绍如何在Java分布式系统中使用Spring函数,并附带演示代码。 一、Spring函数的概述...
    99+
    2023-09-27
    分布式 spring 函数
  • 你知道如何使用 Spring 框架来管理 ASP 对象吗?
    Spring 框架是一种流行的 Java 开发框架,它提供了一种简单的方法来管理 ASP 对象。在本文中,我们将探讨如何使用 Spring 框架来管理 ASP 对象,并提供一些演示代码。 ASP(Active Server Pages)是一...
    99+
    2023-10-23
    对象 unix spring
  • 在MySQL中为何不建议使用utf8
    目录何为字符集?有哪些常见的字符集?ASCIIGB2312GBKGB18030BIG5Unicode & UTF-8 编码mysql 字符集MySQL 字符编码集中有两套 UTF-8 编码实现:utf8 和 ut...
    99+
    2024-04-02
  • 你知道如何在Java中使用不同类型的数据吗?
    当我们编写Java程序时,我们经常需要处理不同类型的数据。在本文中,我们将介绍Java中不同类型的数据以及如何使用它们。 Java中的数据类型可以分为两类:基本数据类型和引用数据类型。基本数据类型是Java语言内置的数据类型,包括整型、浮点...
    99+
    2023-06-03
    数据类型 npm 打包
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作