我使用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不过滤任何实例,如果它本身没有实例化,那么提供者创建的实例将不会被过滤。