1

在 OSGI 中使用 Apache Aries SPI-Fly 启用 SPI 时,我无法调用带参数的方法进行动态编织。我使用了以下捆绑包:

  • org.apache.aries.spifly.dynamic.bundle-1.0.2.jar
  • asm-all-5.0.4.jar
  • org.apache.aries.util-1.1.1.jar

这是我的 pom.xml 的 maven 捆绑插件部分中的标题:

<SPI-Consumer>org.apache.aries.spifly.examples.client2.impl.Activator#getSpiProvider(java.lang.String, java.lang.String)</SPI-Consumer>

<SPI-Provider>org.apache.aries.spifly.examples.client2.impl.Activator</SPI-Provider>

我试图阅读/META-INF/services/org.apache.aries.spifly.mysvc.SPIProvider:

public static SPIProvider getSpiProvider(final String factoryId, final String fallbackClassName){

        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

        String serviceId = "META-INF/services/" + "org.apache.aries.spifly.mysvc.SPIProvider";
        URL r = Thread.currentThread().getContextClassLoader().getResource(serviceId);
        System.out.println("*** Found resource: " + r);
        System.out.println("*** First line of content: " + new BufferedReader(new InputStreamReader(r.openStream())).readLine());

        //return null for the moment
        return null;

    }

如果我从 getSpiProvider 方法中删除参数并将 SPI-Consumer 更改为 pom.xml 中的以下 maven-bundle-plugin 条目

<SPI-Consumer>org.apache.aries.spifly.examples.client2.impl.Activator#getSpiProvider()</SPI-Consumer>

知道这里出了什么问题吗?我们不能使用带参数的方法进行编织吗?

4

0 回答 0