java - 在 Guice 中获取接口(interface)的实现类型

标签 java dependency-injection guice-3

我正在使用 Guice 3 进行依赖注入(inject)。

我有一个特定的用例,我需要知道什么实现类型已绑定(bind)到接口(interface)。 Guice 是否有一种机制可以让我们做到这一点?

最佳答案

为此目的,Guice 提供了扩展 SPI。

您需要扩展 DefaultBindingTargetVisitor(如果您希望覆盖选择性方法)并覆盖您希望检查的访问(Binding 绑定(bind))。

public class MyBindingsVisitor extends DefaultBindingTargetVisitor<Object, String>{

    public String visit(InstanceBinding<? extends Object> binding){
        Key<? extends Object> key = binding.getKey();
            System.out.println("Key :" + key.getTypeLiteral());
            System.out.println("Annotation : " + key.getAnnotation());
            System.out.println("Source : " + binding.getSource());
            System.out.println("Instance : "+binding.getInstance().toString());
            return visitOther(binding);
    }
}

现在,我们需要注入(inject)器来访问绑定(bind)。

for(Binding<?> binding : injector.getBindings().values()){
    System.out.println(binding.acceptTargetVisitor(new MyBindingsVisitor()));
}

这些绑定(bind)是完整的绑定(bind),因此称为注入(inject)器绑定(bind)。

关于java - 在 Guice 中获取接口(interface)的实现类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16800810/

相关文章:

java - 终止 Java RMI 服务器应用程序

java - @Component Spring注解标准作用域

java - Guice 最佳实践和反模式

dependency-injection - 忍者: Constructor parameter

jakarta-ee - 将@Stateful或@Stateless注入(inject)@Singleton EJB

java - Guice 绑定(bind)提供程序未用于依赖项实现

java - 强制通用类型成为接口(interface)?

c# - 跨平台、稳定、功能强大的网络平台

java - 如何使用 guice 注入(inject)来模拟 play 框架中的身份 validator ?

java - 在 Guice 中,如何创建具有不同作用域依赖关系的 Map Binder 单例绑定(bind)?