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

Spring依赖inection还是默认值?

廉实
2023-03-14

我有一辆车,它有一个依赖项:电机

我的类Car是这样的:

@Component
public class Car {

    private Motor motor;

    @Autowired
    public Car(Motor motor) {
        this.motor = motor;
    }

    public Car() {
        this.motor = new Motor("created by Car");
    }

我不确定Spring如何管理该做什么:使用默认/无参数构造函数或构造函数注入依赖关系?应该使用哪个电机实例?


共有2个答案

赫连冠玉
2023-03-14

spring始终默认不调用参数构造函数确保将motar注释为组件

苍和裕
2023-03-14

基于自动留档,

将选择通过匹配Spring容器中的bean可以满足的依赖项数量最多的构造函数。如果没有一个候选者可以满足,则将使用主/默认构造函数(如果存在)。

这意味着,在您的情况下,如果Spring boot容器在引导过程中发现了电机的bean(可能是通过配置或组件等),那么您的汽车bean将被基于构造函数的DI实例化

如果在创建汽车bean期间没有可用的电机bean,则使用默认构造函数。

 类似资料:
  • 问题内容: 能否解释一下为什么Spring为下面所示的bean配置创建两个对象,因为默认情况下spring的默认作用域是singleton? Spring配置在这里: 问题答案: Spring的默认范围是单例。仅仅是你对成为单身人士的含义的想法与Spring如何定义单身人士不匹配。 如果你告诉Spring制作两个具有不同ID和相同类的独立bean,那么你将获得两个独立bean,每个bean具有单例

  • 我有两门课和。规则如下: 每个作业都有一个数字标识符。 每个作业有10个对应的任务。 每个任务都有一个数字标识符。 一个没有就不能存在。 我试图建立这两个类的类图。因为任务不能没有作业,所以我认为这是一个组合,这就是我如何构建类图: 但现在我感到困惑的是,如果这种关联实际上是依赖关系: 在这种情况下,我如何知道关系是组合关系还是依赖关系? 我已经按照Thomas Kilian的建议在类图中修复了组

  • Spring cron 表达式是否使用系统默认时区或 UTC?

  • 我已经玩弄了@scope注释(没有用),但我的理解是我不应该这么做。 提前感谢您提供的任何信息!:)

  • 在angular2中,假设我有一个类和一个类,它们具有相同的属性/成员和方法。如何初始化类? 服务 其中一个子类要扩展类:

  • 我已经研究过这个问题:Spring3:注入默认Bean,除非存在另一个Bean,如果您知道所有Bean的名称,Java配置中显示的解决方案将很好地工作,但在我的情况下,我不知道Bean被称为什么。 有人知道有什么办法可以做到这一点吗?