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);
}
}