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

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

在教程中,我正在使用接口来注入内容,例如它使用IHotDrink接口,然后创建一个实现IHotDrink的Tea类。然后它有一个名为Restaurant的第三个类,它在类中有一个IHotDrink字段,并在构造函数中初始化它。然后通过将Tea Class注入到Restaurant类的构造函数(它采用IHotDrink接口参数)来继续

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

假设我有一堆食品都实现了IHotFoods界面,还有一堆饮料都实现了IHotDrink界面,如果我有一个没有实现任何东西的餐饮类并且需要一个IHotFood界面和IHotDrink接口作为其构造函数的参数(稍后将由不同的食品/饮料类注入),然后在餐厅类中有一个用餐区,我可以注入不同的餐食对象?这样可以吗?或者我是否必须:做一个用餐界面,吃饭实施餐,并让餐厅有一个餐饮接口领域,我可以注入餐?

我不是在问每个类是否应该实现一个接口,我问他们是否应该总是有接口字段来注入其他类,同时实现接口。 (如教程中的示例)

java spring dependency-injection
2个回答
0
投票

不,没有必要总是有接口字段将其他类注入其中也实现接口。接口只是帮助您注入实现相同接口的不同字段。

使用Restaurant类中的IHotDrink接口字段,您可以灵活地使用实现IHotDrink的Tea以及实现IHotDrink的Coffee。

关于你的“膳食”例子,因为你已经在Meal课程中使用了IHotDrink和IHotFood,你可以在Meal课程中享用任何热饮和热食,因此你不需要创建一个Meals界面并且可以用餐。


0
投票

我不是在问每个类是否应该实现一个接口,我问他们是否应该总是有接口字段来注入其他类,同时实现接口。

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

  • 因为你有多个实现,并且不想对声明的类型进行限制。
  • 当您在运行时使用字节码生成来动态创建将实现希望的接口的运行时类(例如org.springframework.data.jpa.repository.JpaRepository的情况)。
© www.soinside.com 2019 - 2024. All rights reserved.