在教程中我正在使用接口来注入内容,例如它使用 IHotDrink接口,然后创建一个 Tea class 来实现 IHotDrink 即可。然后它有一个名为 Restaurant 的第三个类,它在类中有一个 IHotDrink 字段,并在构造函数中初始化它。然后通过向餐厅类的构造函数(带有IHotDrink接口参数)中注入 Tea Class 来继续
所以基本上我的问题是:每个要注入的字段都需要是一个接口吗?
让我们说我有一堆食品都实现了 IHotFoods界面,还有一堆饮料都实现了 IHotDrink界面,它会没关系我有一个没有实现任何内容的餐级,并且将 IHotFood 界面和 IHotDrink 界面作为参数添加到其构造函数中(这将是之后被不同的食物/饮料课程注入)然后在餐厅课堂上吃饭,我可以注入不同的餐食对象?这可以吗?或者我是否必须:制作膳食界面,准备餐食,并且餐厅有膳食接口领域,我可以注入膳食吗?
我不是在问每个类是否应该实现一个接口,我问他们是否应该总是有接口字段来向其中注入其他类来实现接口。 (如教程中的示例所示)
答案 0 :(得分:0)
我不是在问每个班级是否应该实现一个界面,我是 询问他们是否应该总是要注入接口字段 其他类也可以实现接口。
你可以尝试,你会发现你不需要指定一个接口来允许一个类成为一个可注射的bean。
通常在两种情况下定义接口是有意义的:
因为您有多个实现,并且不想对声明的类型进行限制。
在运行时使用字节码生成动态创建将实现所需接口的运行时类(例如org.springframework.data.jpa.repository.JpaRepository
的情况)。
答案 1 :(得分:0)
不,没有必要始终使用接口字段将其他类注入其中,同时实现接口。 接口只是帮助您注入实现相同接口的不同字段。
使用Restaurant类中的IHotDrink接口字段,您可以灵活地使用实现IHotDrink的Tea以及实现IHotDrink的Coffee。
关于你的"用餐"例如,由于您已经在Meal课程中使用了IHotDrink和IHotFood,您可以在Meal课程中享用任何热饮和热食,因此您无需创建Meals界面并享用餐食。