gpt4 book ai didi

Java @Inject 模块和ServiceLoader之间的空指针

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:32 25 4
gpt4 key购买 nike

我有三个 Maven 模块:

  1. Commons 模块:常用操作
  2. 提供程序模块:提取数据的特定实现。
  3. 主模块:使用提供程序模块。

该序列的工作原理如下:

  • 主模块接收请求,并且有一个接口(interface)管理提供程序(Client)并使用ServiceLoader.load(Provider.class)加载提供程序。
  • 我的客户端提取数据(client.retrieveData(request))并选择适当的提供程序。
  • 提供者实现方法 buildRequest()

这是我的问题:来自 commons 模块的支持类在其他两个模块中使用。我可以使用在主模块中注入(inject)的所有类,但在提供程序模块中注入(inject)的类具有空指针。例如,这是提供程序类的实现:

public class ScholarProvider extends AbstractProvider {

@Inject
private DistanceService distance;
@Inject
private final Logger log;
public static final String URL = "https://scholar.google.com";

private MapperObjectRDF mapper;

private String[] domains;
private Person person;

public ScholarProvider() {
person = null;
mapper = null;
}
}

ScholarProvider 以及任何其他提供程序中,距离和日志均为 null。我不明白问题出在哪里。难道是通过ServiceLoader加载provider的问题?有什么建议可能是什么问题吗?或者是否有任何可能的解决方案可以使用我的 DistanceService 进行新的实例化?

最佳答案

你的cdi框架是否知道提供者是一个可以进行注入(inject)的bean?如果您使用 Spring,则需要使用 @Named 或任何继承自 @Componenent 的 spring 特定注释来注释该类,然后确保扫描该类。如果您的框架不了解您的 bean,它就不会执行任何注入(inject)。

关于Java @Inject 模块和ServiceLoader之间的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44959763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com