java - IoC 在运行时决定具体实现

标签 java dependency-injection inversion-of-control

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

所以我有一个接口(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/

相关文章:

c# - Unity 3,RegisterTypes方法在哪里?

java - 方法调用顺序

java - 根据用户输入显示数字的出现...数组,java

java - 使用 Java 中的 Streams/Lambda 将 Stream<Stream<T>> 转换为 T[][]

c# - Presenter 的依赖注入(inject)

c++ - 纯虚拟 C++ 编码的优点和缺点

java - 在 map 上移动时如何更改谷歌地图标记大小

java - 如何将属性注入(inject) Aspect 日志记录类?

java - 测试 Jersey 应用程序,使用 Jersey Injection 内置框架注入(inject)类 (HK2)

c# - 构造函数注入(inject) Win8 App