JAX-RSを使用してJavaでRESTWebサービスを実装することに慣れたばかりで、次の問題が発生しました。私のリソースクラスの1つは、インターフェイスの背後に抽象化されたストレージバックエンドへのアクセスを必要としStorageEngineます。現在のインスタンスをRESTリクエストを提供するリソースクラスに注入したいStorageEngineと思います。これを行うための良い方法は、@Contextアノテーションと適切なContextResolverクラスを使用することだと思いました。これは私がこれまでに持っているものです:
でMyResource.java:
class MyResource {
@Context StorageEngine storage;
[...]
}
でStorageEngineProvider.java:
@Provider
class StorageEngineProvider implements ContextResolver<StorageEngine> {
private StorageEngine storage = new InMemoryStorageEngine();
public StorageEngine getContext(Class<?> type) {
if (type.equals(StorageEngine.class))
return storage;
return null;
}
}
私はcom.sun.jersey.api.core.PackagesResourceConfigプロバイダーとリソースクラスを自動的に検出するために使用しています。ログによると、StorageEngineProviderクラスを適切に取得します(タイムスタンプや不要なものは意図的に省略されています)。
INFO: Root resource classes found:
class MyResource
INFO: Provider classes found:
class StorageEngineProvider
ただし、storage私のリソースクラスのの値は常にですnull-のコンストラクタStorageEngineProviderもそのgetContextメソッドもJerseyによって呼び出されることはありません。私はここで何が間違っているのですか?