繁体   English   中英

如何在Jersey 2.x中将对象注入Context

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM