package hu.sztaki.ilab.longneck.bootstrap; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.beans.factory.support.DefaultSingletonBeanRegistry; import org.springframework.context.ApplicationContext; /** * Spring-related utility method class. * * @author Molnár Péter <molnarp@sztaki.mta.hu> */ public class SpringUtils { /** * Post-registers a singleton into the application context. * * @param applicationContext The application context to hack into. * @param beanName The name of the inserted bean. * @param bean The bean object. */ public static void postRegisterSingleton(ApplicationContext applicationContext, String beanName, Object bean) { // TODO: this is ugly AutowireCapableBeanFactory factory = applicationContext.getAutowireCapableBeanFactory(); if (! (factory instanceof DefaultSingletonBeanRegistry)) { throw new AssertionError(String.format( "Autowire capabale bean factory %1$s is not instanceof %2$s", factory.getClass().getName(), DefaultSingletonBeanRegistry.class.getName())); } DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) factory; // Register singleton registry.registerSingleton(beanName, bean); // Register as disposable bean if (bean instanceof DisposableBean) { registry.registerDisposableBean(beanName, (DisposableBean) bean); } } }