[英]How to inject object into Context in Jersey 2.x
我试图注入提供程序并使用@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
获取注入对象,该如何在这里修改代码?
如果您正在为Neo4j编写非托管扩展 ,则这是关于如何“在Neo4j非托管扩展中通过@Context提供服务”的问题和解答 。
Neo4j具有PluginLifecycle
。 您可以自己实现并在那里提供injectables
。
代码示例:
public class ExamplePluginLifecycle implements PluginLifecycle {
@Override
public Collection<Injectable<?>> start(GraphDatabaseService graphDatabaseService,
Configuration config) {
final List<Injectable<?>> injectables = new ArrayList<>();
injectables.add(injectable(new CostlyServiceImpl, CostlyService.class)); // <---
return injectables;
}
@Override
public void stop() {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.