为什么在 Spring 中,如果目标 bean 仅定义一个构造函数,则不再需要构造函数上的 @Autowired 注解?

问题描述 投票:0回答:1

我正在开始学习Spring框架,我在Spring官方文档中读到了这篇文章。
“从 Spring Framework 4.3 开始,如果目标 bean 一开始只定义一个构造函数,则不再需要在此类构造函数上添加 @Autowired 注释。但是,如果有多个构造函数可用,则必须至少对一个构造函数进行注释,以告知容器哪一个构造函数是可用的。一个就用。”

我想知道 Spring 框架的底层发生了什么,如果它只有一个构造函数,那么 @Autowired 注释就变得不必要了,为什么?另外为什么在多个构造函数的情况下不会发生这种情况?

java spring spring-boot frameworks autowired
1个回答
0
投票

这种简化基于这样的原则:当一个类只有一个构造函数时,Spring 容器本质上很清楚使用哪个构造函数进行依赖注入。因此,使用 @Autowired 标记此构造函数变得多余,因为对于使用哪个构造函数没有歧义。

进行此更改是为了减少样板代码并使配置更加简单。它允许开发人员专注于应用程序的业务逻辑,而不必担心用于依赖注入的构造函数的显式注释,特别是在只有一个构造函数可用的情况下。

但是需要注意的是,如果一个类有多个构造函数,则至少其中一个必须使用 @Autowired 注解,以指示 Spring 容器使用哪个构造函数进行自动装配。此要求确保容器在创建 bean 实例时准确知道要调用哪个构造函数。

此功能通过减少某些场景下对显式注释的需求来简化开发过程,使代码更清晰、更易于阅读。

© www.soinside.com 2019 - 2024. All rights reserved.