IoC在运行时决定特定的实现

时间:2018-02-01 08:24:58

标签: java dependency-injection inversion-of-control

我想在我的框架中实现一些控制反转。

所以我有一个接口GenericDatabase来定义必须实现的方法。我事先并不知道哪些类会实现它,但我有调用接口方法的方法。所以在运行时我需要从配置文件中读取应该使用哪个特定实现(否则,我必须知道用户可能使用的所有潜在实现类)。我已经阅读了一些Martin Fowler的文章,但没有明确这个问题。

我怎样才能做到这一点?

我想我正在尝试类似的事情:

GenericDatabase database = Class.forName("com.example.myCustomDatabase").newInstance();

还有一个障碍,它应该在try-with-resources内部:

try (GenericDatabase database = Class.forName("com.example.myCustomDatabase").newInstance()) {

1 个答案:

答案 0 :(得分:0)

经过一些测试,我可能错了,我认为正确的方法是:

try (GenericDatabase database = (GenericDatabase) Class.forName("com.example.myCustomDatabase").newInstance()) {

使用:

public interface GenericDatabase extends AutoCloseable {

从配置文件中读取com.example.myCustomDatabase