001package org.dllearner.configuration.spring; 002 003import org.dllearner.core.AnnComponentManager; 004import org.dllearner.core.Component; 005import org.dllearner.core.ComponentInitException; 006import org.dllearner.utilities.Helper; 007import org.slf4j.Logger; 008import org.slf4j.LoggerFactory; 009import org.springframework.beans.BeansException; 010import org.springframework.beans.factory.config.BeanPostProcessor; 011 012/** 013 * Created by IntelliJ IDEA. 014 * User: Chris 015 * Date: 8/23/11 016 * Time: 7:00 AM 017 * <p/> 018 * Post Processor to initialize our components. 019 */ 020public class ComponentInitializationBeanPostProcessor implements BeanPostProcessor { 021 022 private static Logger logger = LoggerFactory.getLogger(ComponentInitializationBeanPostProcessor.class); 023 024 @Override 025 public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 026 027 if (bean instanceof Component) { 028 Component c = (Component) bean; 029 030 String componentName = AnnComponentManager.getName(c); 031 try { 032 033 logger.info("Initializing component '{}' of type {} ...", beanName, componentName); 034 long startTime = System.currentTimeMillis(); 035 c.init(); 036 long stopTime = System.currentTimeMillis(); 037 long elapsedTime = stopTime - startTime; 038 039 logger.info("... initialized component '{}' in {}. Status: OK", 040 new String[]{beanName, Helper.prettyPrintMilliSeconds(elapsedTime)}); 041 } catch (ComponentInitException e) { 042 throw new RuntimeException("Problem initializing the component \"" + componentName + "\" with beanName: " + beanName, e); 043 } catch (Exception e) { 044 /** Catch any exception as an init exception */ 045 logger.warn("Could not initialize component \"" + componentName + "\""); 046 throw new RuntimeException(e); 047 } 048 } 049 return bean; 050 } 051 052 @Override 053 public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 054 return bean; 055 } 056}