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



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

使用自定义类型侦听器应该可以解决问题。据我了解,您的问题类似于"postConstruct"问题,在 guice 创建实例时执行实例的代码。也许不久前写的这篇(德语)博客文章将您推向正确的方向。

  1. 使用匹配器定义侦听器应在哪些实例上做出反应。
  2. 使用 afterInjection 钩子处理实例

    @Override public void configure(final Binder binder) { binder.bindListener(Matchers.any(), this); }

    @Override 公共空洞听觉(最终类型文字类型,最终类型遭遇遭遇){ 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);
                }
            }
        }
    });
    

    }

相关内容

  • 没有找到相关文章

最新更新