Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取GUI中接口的实现类型_Java_Dependency Injection_Guice 3 - Fatal编程技术网

Java 获取GUI中接口的实现类型

Java 获取GUI中接口的实现类型,java,dependency-injection,guice-3,Java,Dependency Injection,Guice 3,我正在使用Guice 3进行依赖项注入 我有一个特殊的用例,我需要知道什么样的实现类型已经绑定到接口。Guice是否有一种机制允许我们这样做?为此,Guice提供了扩展SPI 您需要扩展DefaultBindingTargetVisitor(如果您希望覆盖选择性方法)并覆盖您希望检查的访问(绑定绑定) public class MyBindingsVisitor extends DefaultBindingTargetVisitor<Object, String>{ pub

我正在使用Guice 3进行依赖项注入


我有一个特殊的用例,我需要知道什么样的实现类型已经绑定到接口。Guice是否有一种机制允许我们这样做?

为此,Guice提供了扩展SPI

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

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);
    }
}
公共类MyBindingsVisitor扩展了DefaultBindingTargetVisitor{
公共字符串访问(InstanceBinding:injector.getBindings().values()){
System.out.println(binding.acceptTargetVisitor(新的MyBindingsVisitor());
}
这些绑定是完整的绑定,因此被称为注入器绑定。

.getClass().getName()?…但是,有点违背依赖项注入原则…我做不到。getClass()因为我甚至没有试图找到其类的对象的实例。我想我可以实例化一个模拟实例,然后这样做。我还意识到它面临依赖注入。但我需要这样才能在hadoop中将类信息正确写入序列文件。
for(Binding<?> binding : injector.getBindings().values()){
    System.out.println(binding.acceptTargetVisitor(new MyBindingsVisitor()));
}