我想在我的框架中实现一些控制反转。
所以我有一个接口(interface)GenericDatabase
,它定义了必须实现的方法。我事先不知道哪些类将实现此功能,但我有调用接口(interface)方法的方法。因此,在运行时,我需要从配置文件中读取应该使用哪个特定实现(否则,我必须知道用户可能使用的所有潜在实现类)。我读过一些 Martin Fowler 的文章,但没有弄清楚这个问题。
我怎样才能实现这个目标?
我想我正在尝试类似的事情:
GenericDatabase database = Class.forName("com.example.myCustomDatabase").newInstance();
还有一个缺点,它应该位于 try-with-resources 内:
try (GenericDatabase database = Class.forName("com.example.myCustomDatabase").newInstance()) {
最佳答案
经过一些测试,我可能是错的,我认为正确的方法是:
try (GenericDatabase database = (GenericDatabase) Class.forName("com.example.myCustomDatabase").newInstance()) {
与:
public interface GenericDatabase extends AutoCloseable {
其中 com.example.myCustomDatabase
是从配置文件中读取的。
关于java - IoC 在运行时决定具体实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48558246/