Skip to content

Instantly share code, notes, and snippets.

@vicly
Last active March 18, 2022 12:17
Show Gist options
  • Save vicly/d9355d5129fefbbfc4acd05a1508ddaa to your computer and use it in GitHub Desktop.
Save vicly/d9355d5129fefbbfc4acd05a1508ddaa to your computer and use it in GitHub Desktop.
[Jersey custom object injection using `@Context MyObj`] #Java #REST

Custom Factory

import org.glassfish.hk2.api.Factory;
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.process.internal.RequestScoped;

import javax.inject.Inject;
import javax.ws.rs.container.ContainerRequestContext;

import vic.jersey.test.injection.MyObj;


public class MyObjFactory implements Factory<MyObj> {

    private ContainerRequestContext requestContext;

    @Inject
    public MyObjFactory(ContainerRequestContext requestContext) {
        this.requestContext = requestContext;
    }

    @Override
    public MyObj provide() {
        MyObj obj = ...; // get or create MyObj
        return obj;
    }

    @Override
    public void dispose(MobileDevice instance) {
    }

    public static class Binder extends AbstractBinder {
        @Override
        protected void configure() {
            bindFactory(MyObjFactory.class).to(MyObj.class).in(RequestScoped.class);
        }
    }
}

Register binder

public class MyApplication extends ResourceConfig {

    public MyApplication() {
        ....
        register(new MyObjFactory.Binder());
    }

}

Inject it

@Path("tests")
public class MyResource {

  @GET
  public Response test(@Context MyObj myObj) {
      //...
  }

}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment