当前位置: 首页 > 知识库问答 >
问题:

Guice根据从文件读取的类名提供实例

百里京
2023-03-14

在我的项目中,我有一个配置文件,其中列出了接口的具体实现。

如何配置Guice模块,以便在注入接口时从类型中获取具体类的实例?

interface A{}

class AImpl implements A{ @Inject public A(.....)}

class B {
  @Inject
  public B(A a) {}
}


class MyModule extends AbstractModule {
  ...
  @Provides
  public A getA(@ConfiguredClass String classname) {
     Class<A> aClass = (Class<A>) Class.forName(classname);
     // ???
     // this needs to be instantiated by Guice to fulfill AImpl's dependencies
     return aClass.newInstance();
  }
}

config:
class: my.package.AImpl

共有1个答案

王飞虎
2023-03-14

您可以在启动时读取配置文件,将其转换为Map

public class MyModule extends AbstractMdoule{

    //interface -> concrete
    Map<Class, Class> implementsMap;
    ...
    public void configure() {
        for (Map.Entry<Class, Class> implEntry : implementsMap.entrySet()) {
            bind(implEntry.getKey()).to(implEntry.getValue());
        }
    }
}

 类似资料:
  • 我有一个3节点的Apache Ignite集群,我创建了一个以整数为键的缓存,以'subscriber'POJO为值,当我从JAVA程序内部连接到集群并访问缓存时,我得到了上面提到的异常,我有'peerClassLoading'属性设置为false,并且我在所有节点中部署了'subscriber'POJO二进制文件,请在下面找到完整的堆栈跟踪。我错过了什么?当我在JAVA程序中用启动客户端时,它为

  • 我希望我的Spark应用程序(Scala)能够读取S3文件 在我的开发机器上,我可以使用awscli访问S3文件在或中预先配置的配置文件,例如: 但是当尝试从Spark读取这些文件时,使用作为env变量提供的aws_配置文件(aws_配置文件),我得到了以下错误: DoesBucket存在于我的bucket名称中:com.amazonaws.AmazonClientException:BasicA

  • 我正在尝试将csv文件读取到数据帧中。因为我知道我的csv文件,所以我知道我的数据帧的模式应该是什么。此外,我正在使用spark csv包读取文件。我试图指定如下模式。 但是当我检查我创建的数据框架的模式时,它似乎已经采取了自己的模式。我做错了什么吗?如何制作火花来拾取我提到的模式?

  • 问题内容: 我正在阅读有关使用私钥加密的IBM教程。我写的代码如下 上面的代码效果很好。我能够看到结果和所有内容。但我想按如下方式进行修改,以便可以将cipherText存储在文件中。然后,另一个程序从文件中读取加密的文本并将其解密。以下是我到目前为止所做的事情,但我不知道如何进行。只是一些有关如何进行的提示会有所帮助。 现在,该程序的工作已经完成。它已成功将加密的字符串写入文件。新程序仅需解密数

  • 问题内容: 我有以下格式的文本文件: Details.txt 该文件是.txt文件。我想从该文件中读取课程标题,并打印相应的教科书和教师信息。但是我不确定该遵循什么程序?将信息存储在数组中效率不高!我应该如何进行?注意:我无法更改文件中的信息,因此不应更改!显然,文件将通过以下代码读取: 但是我应该如何根据课程名称,教科书和讲师的标签从该文件中提取数据! 问题答案: 首先正确地逐行阅读文件,然后搜

  • 问题内容: 我正在做一个很大的项目,有很多注入。当前,我们正在使用一个类,该类为需要一次的每次注入实现,并且它们大多具有一个行方法。 每当我需要一个新的提供程序时,创建一个新的类就变得很烦人。使用提供程序类比使用方法有什么好处,反之亦然? 问题答案: 据我所知,它们在大多数简单情况下是完全等效的。 无论哪种样式,即使键绑定到类或实例,Guice都可以让您注入和。如果直接获取实例,Guice会自动调