У меня есть проект maven, состоящий из нескольких модулей: серверного приложения и модуля базовой библиотеки.Моим серверным приложением является проект Spring Boot 2, и его pom-файл включает мою базовую библиотеку в качестве одной из его зависимостей.
В моем модуле базовой библиотеки у меня определен класс, который выглядит следующим образом:
public class ServiceFunction implements Function<String, String> {
private DataMapping mapping = new DataMapping();
@Override
public String apply(String str) {
return mapping.apply(str);
}
}
DataMapping
- это класс, который находится в одной из моих транзитивных зависимостей моей базовой библиотеки иего определения выглядят так:
public class DataMapping implements Function<String, String> {
private FunctionMapping mapping = new FieldMapping();
@Override
public String apply(String str) {
return mapping.apply(str);
}
}
FunctionMapping
также является классом, найденным в той же транзитивной зависимости, и выглядит так:
public class FunctionMapping {
public String apply(String str) {
return applyFunction(str);
}
private static String applyFunction(String str) {
DynamicFunction df = DynamicFunction.load();
return df.apply(str);
}
}
Теперь DynamicFunction выглядит следующим образом:
public interface DynamicFunction {
String apply(String str);
static DynamicField lookup() {
return ServiceLoader.load(DynamicFunction.class, ClassLoader.getSystemClassLoader()).iterator().next();
}
}
В моем модуле основной библиотеки я предоставляю типичную реализацию SPI, где у меня есть каталог META-INF / services в моем каталоге ресурсов, и у меня есть файл с именем abc.def.DynamicFunction с содержимым ghi.jkl.MyFunction.
Я определил MyFunction как таковую в своей базовой библиотеке:
public MyFunction {
public String apply(String str) {
return str.toLowerCase();
}
}
Теперь, когда мой сервер запускается и в моем ServiceFunction
вызывается метод apply()
класс, я вижу, что итератор моего ServiceLoader
пуст.Есть ли особый способ загрузки служб, который предоставляется в зависимости от моего приложения Spring Boot?