我有三个maven模块:
序列的工作原理如下:
Client
管理提供商(ServiceLoader.load(Provider.class)
)和加载提供商。Client
提取数据(client.retrieveData(request)
),选择适当的提供商。buildRequest()
。这是我的问题:来自commons模块的支持类在其他两个模块中使用。我可以使用我在主模块中注入的所有类,但在提供程序模块中注入的类具有空指针。例如,这是提供者类的实现:
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
- 以及任何其他提供者 - 距离和日志中为空。我无法理解问题出在哪里。通过ServiceLoader
加载提供商可能会出现问题吗?有什么建议可能是什么问题?或者是否有任何可能的解决方案,我可以使用我的DistanceService
进行新的实例化?
答案 0 :(得分:0)
您的cdi框架是否知道提供程序是要注入的bean?如果您使用的是Spring,则需要使用@Named
或任何继承自@Componenent
的spring特定注释来注释该类,然后确保扫描该类。如果您的框架不了解您的bean,它将不会进行任何注入。
答案 1 :(得分:0)
您所描述的不是CDI的工作原理。在CDI方式中,您将定义每个类并为它们提供限定符。然后你将使用限定符注入它们。
所以不是使用ServiceLoader.load()
而是注入引用,就像这样
@Inject
@Named("the name")
private Provider provider