java - Guice:是否可以根据实例是否存在于类路径中来注入(inject)实例?

标签 java dependency-injection classpath guice

我有一个 Guice 3.0 模块和一些接口(interface),其实现可能会有所不同。我想要的是通过在我的类路径中搜索它来实例化并注入(inject)一些依赖项。

@Inject 
private MyInterface instance;

ConcreteImplementationA implements MyInterface {...}

ConcreteImplementationB implements MyInterface {...}

因此,如果在应用程序的类路径中找到了 ConcreteImplementationA.class - 它应该被注入(inject),如果是 ConcreteImplementationB - 那么 B。

如果我必须为我的界面配置所有可能的绑定(bind),这不是问题。

是否可以用 Guice 来实现?

最佳答案

您可以注册一个custom provider像这样:

public class MyModule extends AbstractModule {

    private static final Class<MyInterface> myInterfaceClass = getMyInterfaceClass();

    @SuppressWarnings("unchecked")
    private static Class<MyInterface> getMyInterfaceClass() {
        try {
            return (Class<MyInterface>) Class.forName("ConcreteImplementationA");
        } catch (ClassNotFoundException e) {
            try {
                return (Class<MyInterface>) Class.forName("ConcreteImplementationB");
            } catch (ClassNotFoundException e1) {
                // Handle no implementation found
            }
        }
    }

    @Provides
    MyInterface provideMyInterface() {
        return myInterfaceClass.newInstance();
    }
}

关于java - Guice:是否可以根据实例是否存在于类路径中来注入(inject)实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369652/

相关文章:

Java InstanceOf 输出

asp.net-core - .Net Core 如何在应用程序中的任何位置访问配置

java - 如何使用Spring在Helper类中获取 Autowiring 的bean

java - IntelliJ IDEA:用于String,System和其他Java类的 “cannot resolve symbol”

java - 在java中向多维数组添加一个元素

java - 这些 Hibernate 对象有何不同?

java - 将.jar文件添加到ClassPath不允许在Seaglass L&F中充分使用库

java - java CLASSPATH 环境变量上的 Jar 被忽略

java sql连接

c# - 使用依赖注入(inject)将 token 获取从startup.cs传递到HomeController.cs