/* * JABM - Java Agent-Based Modeling Toolkit * Copyright (C) 2013 Steve Phelps * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. */ package net.sourceforge.jabm.spring; import java.util.Properties; import net.sourceforge.jabm.util.SystemProperties; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; public class BeanFactorySingleton { protected static DefaultListableBeanFactory beanFactory; public static synchronized BeanFactory getBeanFactory() { if (beanFactory == null) { initialiseFactory(); } return beanFactory; } public static synchronized void registerFactory( DefaultListableBeanFactory beanFactory) { BeanFactorySingleton.beanFactory = beanFactory; } public static Object getBean(String id) { return getBeanFactory().getBean(id); } public static void initialiseFactory(Resource resource) { beanFactory = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); reader.loadBeanDefinitions(resource); // Caching must be disabled for // net.sourceforge.jabm.init.RandomVariateSimulationInitialiser beanFactory.setCacheBeanMetadata(false); beanFactory .addBeanPostProcessor(new RequiredAnnotationBeanPostProcessor()); // Register the custom simulation scope beanFactory.registerScope(SimulationScope.ATTRIBUTE_VALUE, SimulationScope.getSingletonInstance()); } public static void initialiseFactory() { Properties systemProperties = SystemProperties.jabsConfiguration(); String configFile = systemProperties .getProperty(SystemProperties.PROPERTY_CONFIG); if (configFile == null) { throw new IllegalArgumentException( "Must specify a configuration file by setting the system property " + SystemProperties.PROPERTY_BASE + "." + SystemProperties.PROPERTY_CONFIG); } initialiseFactory(new FileSystemResource(configFile)); } }