类 NullPointerException 中的 Guice Inject 字段,引入了循环依赖问题



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

@RequiredArgsConstructor
public class Operator {
@NonNull private final Catalog catalog;
@Inject private Evaluator evaluator;
...
}

其中一个问题是此类引入了循环依赖关系,计算器 ->运算符 -> 计算器。我知道这不是一个好的设计,但被其他软件包消耗,没有简单的方法可以更改它。这个库包含使用 Spring 框架创建的 bean,可以在其中处理这个循环依赖关系。

现在我需要在基于 Guice 的服务中创建运算符的实例,我已经在服务中创建了单例评估器,但它无法将单例注入运算符。

@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 能够将赋值器注入操作员?

提前感谢任何帮助!

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

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 为这个类注入依赖。

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

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

最新更新