4

1 つのバンドルには、クラス ServiceImpl によって実装されるインターフェイス IService があります。

public interface IService
{
    void doSomething();
}

@Component
@Provides
@Instantiate
public class ServiceImpl implements IService
{
    public void doSomething()
    {
    }
}

2 番目のバンドルには、別のクラス ServiceConsumer (GoGo シェル コマンド。特定の注釈は含まれていません) があり、最初のバンドルで提供されるサービスを使用します。

@Component
@Provides
@Instantiate
public class ServiceConsumer
{
    @Requires
    private IService service;

    public doIt()
    {
        service.doSomething();
    }

}

Felix で 2 つのバンドルをインポートして開始すると、すべてのサービスが ipojo:instances を使用して正しくインスタンス化され、ServiceImpl が IService を提供することがわかります。ただし、doIt() が実行されると、サービスは null になります。

IService が利用可能であるように見えるので、@Requires が適切なインスタンスを注入することを期待しますが、そうではないようです。

私がしていないことが非常に明白な何かがあると感じていますが、何をしているのかわかりません。

4

2 に答える 2

1

また、metadata.xml を作成しましたか? ここで例を見てくださいhttp://felix.apache.org/site/ipojo-in-10-minutes.html

afaik また、maven プラグインで生成することもできます。こちらを参照してください http://felix.apache.org/site/ipojo-hello-word-maven-based-tutorial.html

于 2012-01-27T11:24:47.137 に答える
0

doIt()「 」 メソッドはどのように呼ばれますか?

注釈を使用しているため、XML ファイルは必要ありません。

「arch」コマンドがインストールされている場合は、すべてのインスタンスが宣言され、有効であることを確認できます。

ipojo:instances
ipojo:instance instance_name

よろしく。

于 2012-02-24T19:20:21.947 に答える