在 JAX-RS 中使用@Context、@Provider和上下文解析器
我刚刚熟悉了使用 JAX-RS 在 Java 中实现 REST Web 服务,我遇到了以下问题。我的一个资源类需要访问存储后端,该后端抽象出在接口后面。我想将当前实例注入到为REST请求提供服务的资源类中,我认为这样做的一个好方法是使用注释和适当的类。这是我到目前为止所拥有的:StorageEngine
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
但是,在我的资源类中,的值始终是 - Jersey 永远不会调用 的构造函数及其方法。我在这里做错了什么?storage
null
StorageEngineProvider
getContext