/**
*
*/
package de.tutorials;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
/**
* @author Thomas.Darimont
*
*/
public class ApplicationContextInitializationInfo implements
ApplicationContextInitializationInfoMBean {
private volatile int beanDefinitionCount = -1;
private volatile int alreadyInitializedBeanDefinitionCount;
private volatile String latestCompleteInitializedBeanName;
@Override
public double getInitializationProgress() {
double progress = 0.0;
if (beanDefinitionCount != -1) {
progress = alreadyInitializedBeanDefinitionCount
/ (double) beanDefinitionCount;
}
return progress;
}
public int getAlreadyInitializedBeanDefinitionCount() {
return this.alreadyInitializedBeanDefinitionCount;
}
public String getLatestCompleteInitializedBeanName() {
return this.latestCompleteInitializedBeanName;
}
public int getBeanDefinitionCount(){
return this.beanDefinitionCount;
}
@Override
public boolean isInitialized() {
return beanDefinitionCount == alreadyInitializedBeanDefinitionCount;
}
@Override
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory) throws BeansException {
this.beanDefinitionCount = beanFactory.getBeanDefinitionCount();
beanFactory.addBeanPostProcessor(this);
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessAfterInitialization: " + beanName);
this.alreadyInitializedBeanDefinitionCount++;
this.latestCompleteInitializedBeanName = beanName;
return bean;
}
}