当前位置: 首页 > 知识库问答 >
问题:

spring在没有@Autowired注释的构造函数中注入依赖项

陈开宇
2023-03-14

我正在使用spring官方教程中的示例进行实验,并且对此代码有一个依赖关系:
https://github.com/spring-guides/gs-async-method/tree/master/complete

如果您查看apprunner.java类上的代码,我有两个问题:

  1. 当服务器启动时,如果我在这个类的构造函数中放置一个断点,就像在构造函数中一样,GitHublookupService是由spring使用配置的@servicebean提供的。但是,构造函数上没有@autowired注释,那么如何使用正确的依赖关系调用这个构造函数呢?本应为

它是spring boot的自动假设吗?
spring是否看到“私有字段+构造函数参数,并且它假设它应该寻找一个合适的bean?
是spring框架还是spring boot?
我是不是遗漏了什么?

共有1个答案

楚灿
2023-03-14

从spring 4.3开始,如果一个被配置为spring bean的类只有一个构造函数,那么@autowired注释可以省略,spring将使用该构造函数并注入所有必要的依赖项。

关于默认构造函数:您要么需要默认构造函数,当您有多个构造函数时,需要一个带有@autowired批注的构造函数,要么类中只有一个带有或不带有@autowired批注的构造函数。

有关更多信息,请阅读spring官方文档中的@autowired章节。

 类似资料:
  • 问题内容: 如果你看一下课堂上的代码,我有两个问题: 服务器启动时,如果我在此类的构造函数中放置一个断点,就像在构造函数中那样,它是由spring使用配置的bean 提供的。但是,构造函数上没有注释,那么,在这个世界中如何以正确的依赖关系调用该构造函数?应该是null。 这是Spring Boot的自动假设吗? Spring是否看到“私有字段+构造函数参数”,并且假定它应该寻找合适的bean? 是

  • 有人能帮助实现没有注释的Guice吗? pom。xml 我所尝试的: 我得到的错误是: 我理解这个错误。 但是我希望我可以“指向”Guice到正确的构造函数......而不是使用注释。 如您所见,使用默认/空构造函数不是一个好选择,因为这个示例很简单,但我想坚持使用基于构造函数的注入。 附加: 根据我在评论中从赫曼特·辛格那里得到的“暗示”,我想我离得更近了。 我创建了一个ProductionIn

  • 我正试图在计算机上实现这个例子https://developer.android.com/jetpack/docs/guide.这就解释了Android应用程序的结构。 当我使用相同的代码时,我会出现以下错误。 我可以找出这个错误与 当我为ViewModel编写默认的零输入构造函数时,我得到了以下错误。 我想不出这个错误的原因和解决方法。

  • 和另一个类: 在这种情况下,服务将按照预期注入到A类中。据我所知,你不能在a类中使用构造函数,否则注入将无法工作。有没有一种方法可以在a类中使用一个构造函数,同时注入服务?即: 在这种情况下,我得到的服务是空的,无论如何要解决这个问题?我希望能够从类型A中使用“new”创建一个对象,并注入服务,这可能吗?

  • 在之前的所有JUnit版本中,测试构造函数或方法都不允许有参数(至少不能使用标准的Runner实现)。作为JUnit Jupiter的主要变化之一,测试构造函数和方法现在都允许有参数。这带来了更大的灵活性,并为构造函数和方法启用依赖注入。 ParameterResolver定义了测试扩展的API,希望在运行时动态解析参数。如果测试构造函数或@Test, @TestFactory, @BeforeE

  • 我需要重构现有的抽象类来实现依赖注入,但是这个类有两个接受其他参数的构造函数。 我需要注入一些接口,并避免在构造函数中传递任何其他参数,如“settingsId”和“Setting”。所以我的想法是在创建此类的实例后创建两种方法来设置这些参数。 但它看起来不是一个合适的解决方案,因为如果开发人员忘记在创建实例后运行这些方法之一,我们将来可能会得到一个异常(对象未设置为引用...)。我应该如何正确执