
com.google.inject.GuiceComponentReloader Maven / Gradle / Ivy
The newest version!
package com.google.inject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.zeroturnaround.javarebel.ClassEventListener;
import org.zeroturnaround.javarebel.LoggerFactory;
public class GuiceComponentReloader implements ClassEventListener {
private static final ThreadLocal currentInjector =
new ThreadLocal();
private static Map> singletons =
new HashMap>();
private static List injectors =
new ArrayList();
public int priority() {
return PRIORITY_CORE;
}
public void onClassEvent(int eventType, Class klass) {
for (InjectorImpl injector : injectors) {
injector.injectors.remove(klass);
Map injectorSingletons = singletons.get(injector);
if (injectorSingletons == null)
continue;
Object singleton = injectorSingletons.get(klass);
if (singleton == null)
continue;
LoggerFactory.getInstance().echo("JavaRebel-Guice: Reconfiguring singleton '" + klass.getName() + "'.");
injector.injectMembers(singleton);
}
}
public static void setCurrentInjector(InjectorImpl injector) {
currentInjector.set(injector);
}
public static void registerInjector(InjectorImpl injector) {
injectors.add(injector);
}
public static void registerSingleton(Class key, Object singleton) {
Map injectorSingletons = singletons.get(currentInjector.get());
if (injectorSingletons == null) {
injectorSingletons = new HashMap();
singletons.put(currentInjector.get(), injectorSingletons);
}
injectorSingletons.put(key, singleton);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy