public interface HandlerDecoratingModule extends Module
Modules can implement this interface to decorate the application handler before user handlers.
The following example adds a global logging handler so that all requests are logged.
import ratpack.handling.*; import ratpack.guice.*; import com.google.inject.AbstractModule; import com.google.inject.Injector; // A service interface interface Logger { void log(String str); } // A service impl class LoggerImpl implements Logger { void log(String str) { System.out.println(str); } } // A handler that uses the service, and delegates class LoggingHandler implements Handler { private final Handler rest; private final Logger logger; public LoggingHandler(Logger logger, Handler rest) { this.logger = logger; this.rest = rest; } void handle(Context exchange) { logger.log("Request: " + exchange.getRequest().getPath()); rest.handle(exchange); } } // A module that binds the service impl, and decorates the application handler class LoggingModule extends AbstractModule implements HandlerDecoratingModule { protected void configure() { bind(Logger.class).to(LoggerImpl.class); } public Handler decorate(Injector injector, Handler handler) { return new LoggingHandler(injector.getInstance(Logger.class), handler); } }