在Guice绑定过程中注入自定义逻辑

时间:2016-02-21 03:55:14

标签: guice guice-3

有没有办法在Guice绑定中实现一种前后挂钩?例如。在Guice调用构造函数将实例注入方法之前,我是否可以提供逻辑检查,如果实例已经存在于某个地方,如果我能找到实例,那么我直接返回它而不调用构造函数;另一方面,一旦在Guice绑定过程中构造了一个实例,我可以在返回原始调用者之前注入逻辑来处理该实例吗?

1 个答案:

答案 0 :(得分:1)

使用自定义Typelistener应该可以解决问题。根据我的理解,你的问题类似于“postConstruct”问题,在guice创建它时执行实例的代码。也许this(德国)博客文章写了一段时间以前推动你朝着正确的方向发展。

  1. 使用Matcher定义侦听器应该响应的实例。
  2. 使用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);
                }
            }
        }
    });
    

    }