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

标签 java spring dependency-injection guice

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

@RequiredArgsConstructor
public class Operator {

    @NonNull private final Catalog catalog;

    @Inject private Evaluator evaluator;
 ...
}

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

现在我需要在基于Guice的服务中创建Operator的实例,我已经在服务中创建了单例Evaluator,但它无法将单例注入(inject)到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 类正在用于基于 Spring 框架的其他服务,因此我不想更改它。我该怎么做才能让 Guice 能够将 Evaluator 注入(inject) 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) {
    // ...
  }
}

关于java - Guice Inject Field in class NullPointerException,引入循环依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45645661/

相关文章:

java - 将单个元素传递给接受集合的方法

java - 使用 StreamEx 从 Stream 中删除空的 Optionals

Spring-data-rest 和 Spring-jpa

java - 使用 Spring 集成测试的 OSGi 片段

c# - 将 Autofac.Mvc5 从 3.3.2 更新到 3.3.3 后出错

c# - 如何从长时间运行的操作中获取中间结果?

java - 整数实例变量上的线程同步

java - 终止 Java 程序

java - 如何检查、抛出和捕获 bean 的验证 ConstraintViolationException

java - Spring 依赖注入(inject)到带有构造函数的类