All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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