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


72

我正在尝试这个官方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如何知道应该使用参数运行构造函数?是因为它是唯一的构造函数吗?

Answers:


156

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

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

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



我有一个类似的问题,只是我的班级没有被注释为Bean!实际上,它根本没有注释!Spring仍尝试自动装配构造函数,但失败了,因为未找到与构造函数参数类型匹配的Bean。但是该类确实扩展了PropertySource。那可能是原因吗?有办法避免这种自动装配吗?
TsTiX
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.