【发布时间】:2015-10-11 05:33:10
【问题描述】:
我试图注入提供者并使用@Context 在neo4j 和Jersey 2.x 中使用该对象。目前,我通过自定义注解来实现它,例如:
@NameBinding
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER,ElementType.FIELD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface BaseInject {}
提供者为:
@Singleton
public class BaseExecutorResolver implements InjectionResolver<BaseInject> {
private Database database;
@Override
public Object resolve(Injectee injectee, ServiceHandle<?> serviceHandle) {
if (Database.class == injectee.getRequiredType()) {
database = Neo4jContainer.neo4jServer.getDatabase();
return database;
}
return null;
}
@Override
public boolean isConstructorParameterIndicator() {
return false;
}
@Override
public boolean isMethodParameterIndicator() {
return true;
}
}
绑定代码如下:
bind(BaseExecutorResolver.class).to(new TypeLiteral<InjectionResolver<BaseInject>>() {
}).in(Singleton.class);
在资源类中,我可以使用@BaseInject Database db来获取注入对象。
但是如果我想通过@Context获取注入对象,我应该如何修改这里的代码呢?
【问题讨论】:
-
对不起,我搞错了,InjectionResolver如下: public class BaseExecutorResolver implements InjectionResolver
{ private Database database; @Override public Object resolve(Injectee injectionee, ServiceHandle> serviceHandle) { if (Database.class== injectee.getRequiredType()) { database = Neo4jContainer.neo4jServer.getDatabase();返回数据库; } 返回空值; } } -
你想要的是
Factory,如here所示 -
非常感谢,这正是我想要的
标签: java neo4j jax-rs jersey-2.0