Package com.sun.jersey.guice.spi.container.servlet

Provides support for Guice-based Web applications.

See: Description

Package com.sun.jersey.guice.spi.container.servlet Description

Provides support for Guice-based Web applications.

Guice support is enabled by referencing the Guice filter GuiceFilter and an application specific ServletContextListener that extends from GuiceServletContextListener in the web.xml. For example, the web.xml may be as follows:

   <web-app>
     <listener>
       <listener-class>foo.MyGuiceConfig</listener-class>
     </listener>
     <filter>
       <filter-name>Guice Filter</filter-name>
       <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
     </filter>
     <filter-mapping>
       <filter-name>Guice Filter</filter-name>
       <url-pattern>/*</url-pattern>
     </filter-mapping>
   </web-app>
 
and the application specific servlet context listener may be as follows:
     package foo;
 
     import com.google.inject.Guice;
     import com.google.inject.Injector;
     import com.google.inject.servlet.GuiceServletContextListener;
     import com.google.inject.servlet.ServletModule;
     import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
     import com.sun.jersey.guice.JerseyServletModule;
     import foo.GuiceResource;
     
     public class MyGuiceConfig extends GuiceServletContextListener {
 
         @Override
         protected Injector getInjector() {
             return Guice.createInjector(new JerseyServletModule() {
 
                 @Override
                 protected void configureServlets() {
                     bind(GuiceResource.class);
 
                     serve("/*").with(GuiceContainer.class);
                 }
         });
     } 
 }
 
Notice that one class GuiceResource is bound and the GuiceContainer is declared in the serve method. A instance of module JerseyServletModule is created. This module extends from ServletModule and provides JAX-RS and Jersey bindings.

Instances of GuiceResource will be managed according to the scope declared using Guice defined scopes. For example the GuiceResource could be as follows:

    package foo;
 
    import javax.ws.rs.GET;
    import javax.ws.rs.Produces;
    import javax.ws.rs.Path;
    import javax.ws.rs.QueryParam;
    import javax.enterprise.context.RequestScoped;
 
    @Path("bound/perrequest")
    @RequestScoped
    public class GuiceResource {
 
        @QueryParam("x") String x;
 
        @GET
        @Produces("text/plain")
        public String getIt() {
            return "Hello From Guice: " + x;
        }     
    }
 

Any root resource or provider classes bound by Guice will be automatically registered. It is possible to intermix Guice and non-Guice registration of classes by additionally using the normal Jersey-based registration mechanisms in the servlet context listener implementation. For example:

     package foo;

     import com.google.inject.Guice;
     import com.google.inject.Injector;
     import com.google.inject.servlet.GuiceServletContextListener;
     import com.google.inject.servlet.ServletModule;
     import com.sun.jersey.api.core.PackagesResourceConfig;
     import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
     import com.sun.jersey.guice.JerseyServletModule;
     import foo.GuiceResource;
     import java.util.HashMap;
     import java.util.Map; 
 
     public class GuiceServletConfig extends GuiceServletContextListener {
 
         @Override
         protected Injector getInjector() {
             return Guice.createInjector(new JerseyServletModule() {
 
                 @Override
                 protected void configureServlets() {
                     bind(GuiceResource.class);

                     Map<String, String> params = new HashMap<String, String>();
                     params.put(PackagesResourceConfig.PROPERTY_PACKAGES, "unbound");
                     serve("/*").with(GuiceContainer.class, params);
                 }
             });
         }
     }
 

Any root resource or provider classes found in the package unbound or sub-packages of will be registered whether they be Guice-bound nor not.

Sometimes it is convenient for developers not to explicitly bind a resource or provider, let Guice instantiate, and let Jersey manage the life-cycle. This behavior can be enabled for a resource or provider class as follows:

  1. a class constructor is annotated with Inject;
  2. the class is not explicitly bound in Guice; and
  3. the class is registered using a Jersey based registration mechanism, for example using package scanning registration.

In other cases it is convenient to let Jersey instantiate and manage the life-cycle and let Guice perform injection. This behavior can be enabled for a resource or provider class as follows:

  1. a field or method is annotated with Inject;
  2. the class is not explicitly bound in Guice; and
  3. the class is registered using a Jersey based registration mechanism, for example using package scanning registration.

Copyright © 2013 Oracle Corporation. All rights reserved.