TypeListener不检测Map实例

时间:2016-04-23 12:50:59

标签: java dependency-injection java-8 guice

我使用Guice TypeListener来拦截由提供者生成的地图实例。

这里是我绑定监听器的配置方法

@Override
public void addConfig() {
    MapListener mapListener = new MapListener();
    requestInjection(mapListener);
    bindListener(Matchers.any(), mapListener);
}

这是此提供商创建的地图实例

  @Provides
  Map<String, String> mapTest(){
    return new HashMap<>();
  }

这是检测地图实例的侦听器类

public class MapListener implements TypeListener {

    @Override
    public <I> void hear(final TypeLiteral<I> typeLiteral, TypeEncounter<I> typeEncounter) {
        typeEncounter.register((InjectionListener<I>) i -> {
        if(i.getClass().isAssignableFrom(Map.class)){
              System.out.println("DI:"+ i.getClass()
                                .getName());
             //TODO:Logic to modify map
        }
        });
    }
}

问题是Map永远不会传递给listen方法。 我做错了吗?

问候。

解决方案

Guice不过滤任何实例,如果它本身没有实例化,那么提供者创建的实例将不会被过滤。

0 个答案:

没有答案