一尘不染

Spring在没有@Autowired注解的情况下将依赖项注入构造函数中

spring-boot

我正在尝试这个官方Spring 教程中的示例,并且对此代码有依赖性:https :
//github.com/spring-guides/gs-async-
method/tree/master/complete

如果您看一下AppRunner.java 课堂上的代码,我有两个问题:

  1. 服务器启动时,如果我在此类的构造函数中放置一个断点,就像在构造函数中那样,它GitHubLookupService是由spring使用@Service配置的bean 提供的。但是,@Autowired构造函数上没有注释,那么在世界范围内如何以正确的依赖关系调用此构造函数?应该是null

这是 Spring Boot 的自动假设吗?
Spring是否看到“私有字段+构造函数参数”,并且假定它应该寻找合适的bean?
Spring Framework 还是 Spring boot
我缺少什么了吗?

  1. 如我所记得,必须为bean /服务等提供 默认构造函数 。为什么此类(AppRunner)没有默认构造函数?Spring如何知道应该使用参数运行构造函数?是因为它是唯一的构造函数吗?

阅读 823

收藏
2020-05-30

共1个答案

一尘不染

从Spring 4.3 开始,如果配置为Spring
bean的类仅具有一个构造函数,则@Autowired可以省略注释,并且Spring将使用该构造函数并注入所有必需的依赖项。

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

阅读@AutowiredSpring官方文档中的章节以获取更多信息。

2020-05-30