package com.netflix.governator; import javax.inject.Inject; import javax.inject.Singleton; import com.google.inject.AbstractModule; /** * When installed ShutdownHookModule will link a JVM shutdown hook to * LifecycleManager so that calling System.exit() will shutdown * it down. * * <pre> * {@code * Governator.createInjector(new LifecycleModule(), new ShutdownHookModule()); * } * </pre> */ public final class ShutdownHookModule extends AbstractModule { @Singleton public static class SystemShutdownHook extends Thread { @Inject public SystemShutdownHook(final LifecycleShutdownSignal shutdown) { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { shutdown.signal(); } }); } } @Override protected void configure() { bind(SystemShutdownHook.class).asEagerSingleton(); } @Override public boolean equals(Object obj) { return getClass().equals(obj.getClass()); } @Override public int hashCode() { return getClass().hashCode(); } @Override public String toString() { return "ShutdownHookModule[]"; } }