See: Description
Class | Description |
---|---|
GuiceContainer |
A
Servlet or Filter for deploying root resource classes
with Guice integration. |
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:
and the application specific servlet context listener 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>
Notice that one classpackage 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); } }); } }
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:
Inject
;
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:
Inject
;
Copyright © 2013 Oracle Corporation. All rights reserved.