有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java创建接口字段以注入vs对象?

在我所做的教程中,它使用接口注入东西,例如,它使用ihotdreak接口,然后创建一个Tea类,该类实现ihotdreak。然后,它有一个名为Restaurant的第三个类,该类在类内部有一个ihotdreak字段,并在构造函数中对其进行初始化。然后,它将Tea类注入到Restaurant类的构造函数中(该构造函数接受ihotdreak接口参数)

所以基本上我的问题是:要注入的每个字段都需要是一个接口吗

假设我有一堆食品都实现了IHotFoods接口,还有一堆饮料都实现了IHotFoods接口,如果我有一个不实现任何东西的Dine类,并将IHotFood接口和iHotDiffer接口作为参数引入其构造函数(稍后将由不同的food/Differs类注入)中,然后在我创建的restaurant类中有一个Diet字段,这样可以吗可以注射不同的食物吗这样可以吗?或者我必须:制作一个膳食接口,让膳食实现膳食,让餐厅有一个我可以将膳食注入的膳食接口字段

我不是问每个类是否都应该实现一个接口,而是问它们是否应该始终具有接口字段,以便将其他也实现该接口的类注入其中。(如本教程中的示例所示)


共 (2) 个答案

  1. # 1 楼答案

    I'm not asking whether every class should implement an interface, I'm asking whether they should always have interface fields to inject other classes into them that also implement the interface.

    您可以尝试一下,您会发现不需要指定接口来允许类成为可注入bean
    定义接口通常在两种情况下有意义:

    • 因为您有多个实现,不想对声明的类型进行限制

    • 当您在运行时使用字节码生成动态创建将实现所需接口的运行时类时(例如org.springframework.data.jpa.repository.JpaRepository

  2. # 2 楼答案

    不,不必总是使用接口字段将其他类注入其中,这些类也实现了接口。 接口只是帮助您注入实现同一接口的不同字段

    在Restaurant类中使用ihotdreak接口字段可以让您灵活地选择实现ihotdreak的Tea和实现ihotdreak的Coffee

    关于您的“膳食”示例,由于您已经在“膳食”类中使用了IHotDrink和IHotFood,因此您可以在“膳食”类中使用任何热饮料和热食品,因此您不必创建膳食接口并使用膳食工具