4

外部 jar を介してインターフェイスの実装を提供する最も簡単な方法が必要です。クラスまたはインターフェイス名がリファクタリングされたときにエラーが発生する可能性があるため、text/xml ファイルの使用は避けたいと考えています。

宣言的な方法で実装を登録することになっている@ServiceProvider アノテーションがあるため、Netbeans Lookup を試しました。

そこで、インターフェイスとプロバイダーを異なる jar に分割することさえしない簡単な試用コードを作成しましたが、それでもコンポーネントの検索に失敗します。

import org.openide.util.Lookup;
import org.openide.util.lookup.ServiceProvider;

public class LookupTrial {
public static void main(String[] args) {
    IService s = Lookup.getDefault().lookup(IService.class);
    if(s==null)
        throw new RuntimeException("lookup failed");
    else
        s.hello();
}

public interface IService{
    public void hello();
}

@ServiceProvider(service=IService.class)
public class MyImplementation implements IService{
    public MyImplementation(){}

    @Override
    public void hello() {
        System.out.println("hello lookup");
    }
}
}

ルックアップを間違って使用していますか? やりたいことを行うには、別のルックアップ ライブラリを検索する必要がありますか?

4

1 に答える 1