Я бы хотел @RequestScope класса (например, Rabbit.class). Простой способ сделать это - аннотировать класс с помощью @RequestScope или добавить инструкцию в модуль
public void configure(){
bind(Rabbit.class).in(RequestScope.class)
...
}
Однако это немного опасное изменение, поэтому я бы хотел Защитите это поведение с помощью флага эксперимента. Флаг эксперимента может быть разным (true или false) для любого данного запроса. Поэтому 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);
}
Не хорошо. Круговая зависимость:
Rabbit -> RabbitProvider -> @ThisIsRequestScoped Rabbit -> Rabbit
Оба ключа @ThisIsNotRequestScoped Rabbit и @ThisIsRequestScoped Rabbit указывают на кролика, который указывает на кролика , Не уверен, как исправить этот круг. Любые идеи? Можно ли даже связать тип с провайдером, который предоставит этот тип в разных областях?