Java 向资源中注入对象

Java 向资源中注入对象,java,rest,dependencies,jersey,code-injection,Java,Rest,Dependencies,Jersey,Code Injection,无法确定如何在jersey资源中访问jersey server start上创建的对象。基本上,我想做的是将数据库上下文注入到资源中 JerseyServer: public boolean startServer(String keyStoreServer, String trustStoreServer) { //Check if GraphDb is setup if (gdbLogic == null) { //FIXME - maybe throw an

无法确定如何在jersey资源中访问jersey server start上创建的对象。基本上,我想做的是将数据库上下文注入到资源中

JerseyServer:

public boolean startServer(String keyStoreServer, String trustStoreServer) {
    //Check if GraphDb is setup
    if (gdbLogic == null) {
        //FIXME - maybe throw an exception here?
        return false;
    }

    // create a resource config that scans for JAX-RS resources and providers
    // in org.developer_recommender.server package
    final org.glassfish.jersey.server.ResourceConfig rc = new org.glassfish.jersey.server.ResourceConfig().packages("org.developer_recommender.server").register(createMoxyJsonResolver());

    WebappContext context = new WebappContext("context");
    ServletRegistration registration = context.addServlet("ServletContainer", ServletContainer.class);
    //TODO: value setzen
    registration.setInitParameter("jersey.config.server.provider.packages", "org.developer_recommender.server.service;org.developer_recommender.server.auth");
    registration.setInitParameter(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, SecurityFilter.class.getName());   
    SSLContextConfigurator sslContext = new SSLContextConfigurator();

    sslContext.setKeyStoreFile(keyStoreServer);
    sslContext.setTrustStoreFile(trustStoreServer);

    //TODO - 
    sslContext.setKeyStorePass("123456");
    sslContext.setTrustStorePass("123456");
    // create and start a new instance of grizzly http server
    // exposing the Jersey application at BASE_URI
    HttpServer server = null;
    try{
        SSLEngineConfigurator sslec = new SSLEngineConfigurator(sslContext).setClientMode(false).setNeedClientAuth(true);
        server = GrizzlyHttpServerFactory.createHttpServer(getBaseURI()/*URI.create(BASE_URI)*/, rc, true , sslec);
        System.out.println("Jersey app started. Try out " + BASE_URI);
        context.deploy(server);
        return true;
    } catch(Exception e ){
        System.out.println(e.getMessage());
    }

    return false;
服务:

public class Service {

    @Inject
    protected GDBLogic gbdLogic;

}
所以我希望startServer中的GDBLogic实例可以在Jersey资源中访问。有没有关于如何实现这一目标的建议?
我不想使用GDBLogic的静态字段来实现这一点,因为我们将至少有两种不同的数据库配置。

您需要设置实例绑定以使注入工作。您可以通过向资源配置中添加HK2抽象绑定器来实现这一点:

final ResourceConfig rc = new ResourceConfig()
    .packages("org.developer_recommender.server")
    .register(createMoxyJsonResolver())
    .register(new AbstractBinder() 
    {
        @Override
        protected void configure()
        {
            bind(gdbLogic).to(GDBLogic.class);
        }
    });
可能重复: