有没有办法在Guice绑定中实现一种前后挂钩?例如。在Guice调用构造函数将实例注入方法之前,我是否可以提供逻辑检查,如果实例已经存在于某个地方,如果我能找到实例,那么我直接返回它而不调用构造函数;另一方面,一旦在Guice绑定过程中构造了一个实例,我可以在返回原始调用者之前注入逻辑来处理该实例吗?
答案 0 :(得分:1)
使用自定义Typelistener应该可以解决问题。根据我的理解,你的问题类似于“postConstruct”问题,在guice创建它时执行实例的代码。也许this(德国)博客文章写了一段时间以前推动你朝着正确的方向发展。
使用afterInjection挂钩来处理实例
@覆盖 public void configure(final Binder binder){ binder.bindListener(Matchers.any(),this); }
@覆盖 public void hear(最终TypeLiteral类型,最终TypeEncounter遭遇){ encounter.register(new InjectionListener(){
@Override
public void afterInjection(final I injectee) {
// alle postconstruct Methoden (nie null) ausführen.
for (final Method postConstructMethod : filter(asList(injectee.getClass().getMethods()), MethodPredicate.VALID_POSTCONSTRUCT)) {
try {
postConstructMethod.invoke(injectee);
} catch (final Exception e) {
throw new RuntimeException(format("@PostConstruct %s", postConstructMethod), e);
}
}
}
});
}