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によって呼び出されることはありません。私はここで何が間違っているのですか?