有没有办法在 Guice 绑定中实现前后钩子?例如,在 Guice 调用构造函数以获取要注入方法的实例之前,我是否可以提供逻辑检查该实例是否已经存在于某处,如果我能找到该实例,那么我直接返回它而不调用构造函数;另一方面,一旦在 Guice 绑定过程中构造了一个实例,我可以在它返回给原始调用者之前注入逻辑来处理该实例吗?
问问题
367 次
1 回答
1
使用自定义Typelistener应该可以解决问题。据我了解,您的问题类似于“postConstruct”问题,在 guice 创建实例时执行实例代码。也许不久前写的这篇(德语)博客文章将您推向了正确的方向。
- 使用 Matcher 来定义侦听器应该对哪些实例做出反应。
使用 afterInjection 钩子处理实例
@Override public void configure(final Binder binder) { binder.bindListener(Matchers.any(), this); }
@Override public void hear(final TypeLiteral type, final TypeEncounter meet) { meet.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); } } } });
}
于 2016-02-23T08:47:01.070 回答