Spring Boot应用程序依赖项的服务提供程序未加载

时间:2019-04-17 20:33:59

标签: java spring maven spring-boot

我有一个由多个模块组成的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();
    }
}

现在,一旦服务器开始运行并且在apply()类中调用了ServiceFunction方法,我发现ServiceLoader的迭代器为空。是否有一种特殊的方式来加载我的Spring Boot应用程序依赖项中提供的服务?

0 个答案:

没有答案