在不同范围内提供相同类型的向导提供者-循环依赖性

问题描述 投票:0回答:1

我想@RequestScope一个类(例如Rabbit.class)。一种简单的方法是用@RequestScope注释类,或在模块中添加一条语句。

  public void configure(){
    bind(Rabbit.class).in(RequestScope.class)
    ...
  }

但是,这是一个危险的更改,因此,我想用一个实验标记来保护这种行为。对于任何给定的请求,实验标志可以不同(对或错)。因此,RequestScope'ing必须在注入标记的提供程序中完成。

public class RabbitProvider extends Provider<Rabbit> {

    @Inject
    RabbitProvider(boolean flag, @ThisIsRequestScoped Rabbit requestScopedRabbit, @ThisIsNotRequestScoped Rabbit newRabbit) {
      // save to instance vars
    }

    @Override
    Rabbit get() {
      return flag ? requestScopedAnimal : newAnimal;
    }
}
  public void configure(){
    bind(Rabbit.class).annotatedWith(ThisIsRequestScoped.class).in(RequestScoped.class);
    bind(Rabbit.class).annotatedWith(ThisIsNotRequestScoped.class);
    bind(Rabbit.class).toProvider(RabbitProvider.class);
  }

不好。循环依赖:

兔子-> RabbitProvider-> @ThisIsRequestScoped Rabbit-> Rabbit

两个键@ThisIsNotRequestScoped Rabbit和@ThisIsRequestScoped Rabbit都指向Rabbit,后者指向提供者。不确定如何解决此圈子。有任何想法吗?甚至可以将类型绑定到将在不同范围内提供该类型的提供程序吗?

我想@RequestScope一个类(例如Rabbit.class)。一种简单的方法是使用@RequestScope注释类,或在模块中添加一条语句public void configure(){bind(...

java generics guice
1个回答
0
投票

Ah-找到了一种可以在您拥有超类类型的情况下使用的方法。

© www.soinside.com 2019 - 2024. All rights reserved.