当前位置: 首页 > 面试题库 >

如何获得与Guice接口的所有实现者/子类?

郝冥夜
2023-03-14
问题内容

使用Spring,您可以定义一个数组属性,并让Spring注入从给定类型派生的每个(@Component)类之一。

Guice中有与此等效的功能吗?还是添加了此行为的扩展点?


问题答案:

这看起来像Guice
MultiBinder的用例。您可能会有类似的内容:

interface YourInterface {
    ...
}

class A implements YourInterface {
    ...
}

class B implements YourInterface {
    ...
}

class YourModule extends AbstractModule {
    @Override protected void configure() {
        Multibinder.newSetBinder(YourInterface.class).addBinding().to(A.class):
        Multibinder.newSetBinder(YourInterface.class).addBinding().to(B.class):
    }
}

您可以在Set<YourInterface>任何地方注入:

class SomeClass {
    @Inject public SomeClass(Set<YourInterface> allImplementations) {
        ...
    }
}

那应该符合您的需求。



 类似资料:
  • 我试图得到trait(接口)的所有实例子类。这个特性有多个实现,由第三方用户提供。 这是否可能得到所有实例子类没有显式绑定,因为我没有控制,实现由第三方用户提供。? 我已经看到了同样的问题,你需要明确地绑定。 代码示例: 这不起作用。任何帮助都将不胜感激!

  • 问题内容: 我正在实现一个接口,现在我想在classpath中获得该接口的所有实现。这可能还是我应该做些其他的事情? 问题答案: 充其量,这将是昂贵的。在最坏的情况下(取决于类加载器),这可能是不可能的。 我强烈建议您寻找一种替代方法来解决您要解决的基本问题。

  • 问题内容: 我正在尝试通过Java应用程序使用JRuby(通过JRuby 1.5中包含的JSR233接口)来加载Java接口的ruby实现。 我的示例实现如下所示: 接口: Ruby实现: 类加载器: (显然,加载器在现实生活中更为通用-它不假定实现类名称为“ ScriptDemo”-这只是为了简单起见)。 问题-我在加载程序的最后一行收到了一个类强制转换异常- 返回的类型不能很好地转换为我的接口

  • 问题内容: 我可以用反射之类的方法做到吗? 问题答案: 我已经搜索了一段时间,似乎有不同的方法,这里是一个摘要: 如果你不介意添加依赖项,则反射库非常受欢迎。它看起来像这样: 请注意,要使其正常工作,你需要定义为并声明其实现。你这样做,通过创建一个文件的名称和声明的所有实现Pet它 包级注释。这是一个例子: 和注释定义: 并且你必须在该包内名为的文件中声明包级注释。以下是示例内容: 请注意,只有那

  • 问题内容: 考虑以下类层次结构: 众所周知,子类与其超类之间存在关系(is-a)。 问:有没有像“是一个”之间的任何关系和? 好的答案,但是您说过“ is-a”也是和之间的关系, 但是 “ is-a”是 类 之间的关系,并且接口不是类! 问题答案: 是。关系是完全一样的 书也是应税的。 编辑 接口是与Java的关键字(可能是C#我不知道)匹配的工件。 在OO接口中,类是“提交”的一组操作,仅此而已

  • 问题内容: 我正在开发一个应用程序(Quartz调度程序),其中有一个作业类负责实际执行工作,我们需要在Quartz调度程序中创建触发器时告知/传递作业类的名称。 我想为所有想使用该API的人提供一个扩展点(除了我将作为API的一部分提供的一些通用作业之外)。这个想法是创建一个(标记)接口,如果有人想将其类声明为调度程序作业类,那么他们要做的就是(声明)实现该接口。 我不确定如何找到合约之后的类(