Guice Inject Field in class NullPointerException,引入了循环依赖问题

Guice Inject Field in class NullPointerException, circular dependency issue introduced

我需要使用在单独库中定义的 Guice 中创建单例。

@RequiredArgsConstructor
public class Operator {

    @NonNull private final Catalog catalog;

    @Inject private Evaluator evaluator;
 ...
}

其中一个问题是 class 引入了循环依赖,Evaluator -> Operator -> Evaluator。我知道这不是一个好的设计,但被其他包消耗了,没有简单的方法来改变它。这个库有使用 Spring 框架创建的 beans,可以在其中处理这种循环依赖。

现在我需要在基于 Guice 的服务中创建一个 Operator 的实例,我已经在服务中创建了单例 Evaluator,但是无法将单例注入 Operator。

@Provides @Singleton
public Operator operator(final Catalog catalog) 
{
    return new Operator(catalog);
}

@Provides @Singleton
public Evaluator evaluator(final Operator operator) {
    return new Evaluator(operator);
}

由于 Operator class 正在用于基于 Spring 框架的其他服务,我不想更改它。我该怎么做才能使 Guice 能够将 Evaluator 注入 Operator?

在此先感谢您的帮助!

试试这个,希望对你有帮助。

public class Evaluator {
  @Inject public Evaluator(Operator op) {
    // ...
  }
}
public class Operator {
  @Inject public Operator(map m) {
    // ...
  }
}
public class map {
  @Inject public map(Provider<Evaluator> EvaluatorProvider) {
    // ...
  }
}

在这种循环依赖的情况下,Guice不够智能,无法帮助注入依赖,你可以专门让Guice为此注入依赖class。

@Provides @Singleton
public Operator operator(final Catalog catalog) 
{
    return new Operator(catalog);
}

然后 injector.injectMembers(injector.getInstance(Operator.class)) 将有助于注入所需的依赖项。