我刚刚熟悉使用 JAX-RS 在 Java 中实现 REST Web 服务,但遇到了以下问题。我的资源类之一需要访问存储后端,该后端被抽象为StorageEngine
接口后面。我想将当前StorageEngine
实例注入到服务于 REST 请求的资源类中,我认为这样做的一个好方法是使用@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
- Jersey 的构造函数StorageEngineProvider
及其getContext
方法都不会被调用。我在这里做错了什么?