Python中文网

一个关于 编程问题的解答网站.

有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Guice从覆盖中访问原始值

测试中我想包装另一个模块已经提供的对象。 基本上是这样的(但有效):

Guice.createInjector(Modules.override(
    // This module lives somewhere else and I rather can't change it
    new AbstractModule() {
        @Override
        protected void configure() {
          bind(Ticker.class).to(TickerImpl.class);
        }

        @Provides @Singleton
        public Tacker getTacker(Ticker ticker) {
          return new Tacker(ticker);
        }
    }).with(new AbstractModule() {
        @Override
        protected void configure() {
        }

        // This doesn't work. oldTicker is an instance of 
        // DelegatingInvocationHandler that references the
        // result of this function causing infinite recursion.
        @Provides @Singleton Ticker getTicker(Ticker oldTicker) {
          return new SpyingTicker(oldTicker);
        }
    })).getInstance(Tacker.class).tack();

有没有办法做到这一点?我找到的唯一解决方案是在覆盖中执行此操作:

        @Provides @Singleton
        public Tacker getTacker(Ticker ticker) {
          return new Tacker(new SpyingTicker(ticker));
        }

这是不理想的,因为它复制了原始模块的逻辑,并且没有在任何地方取代“Ticker”的注入(只是在创建“Tacker”时)


共 (0) 个答案