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

org.springframework.beans.factory.access.BeanFactoryBootstrap Maven / Gradle / Ivy

There is a newer version: 2.0-M4
Show newest version
/*
 * Copyright 2002-2004 the original author or authors.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */ 

package org.springframework.beans.factory.access;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.PropertiesBeanDefinitionReader;

/**
 * One singleton to rule them all. Reads System properties, which
 * must contain the definition of a bootstrap bean factory using
 * the Properties syntax supported by PropertiesBeanDefinitionReader.
 *
 * The name of the bootstrap factory must be "bootstrapBeanFactory".
 * 
 * Thus a typical definition might be:
 * 
 * bootstrapBeanFactory.class=com.mycompany.MyBeanFactory
 * 
 *
 * 

Use as follows: * * BeanFactory bf = BeanFactoryBootstrap.getInstance().getBeanFactory(); * * * @author Rod Johnson * @since December 2, 2002 * @see org.springframework.beans.factory.support.PropertiesBeanDefinitionReader */ public class BeanFactoryBootstrap { public static final String BEAN_FACTORY_BEAN_NAME = "bootstrapBeanFactory"; private static BeanFactoryBootstrap instance; private static BeansException startupException; private static void initializeSingleton() { try { instance = new BeanFactoryBootstrap(); } catch (BeansException ex) { startupException = ex; } } // Do initialization when this class is loaded to avoid // potential concurrency issues or the need to synchronize later static { initializeSingleton(); } /** * Return the singleton instance of the bootstrap factory * @return BeanFactoryBootstrap * @throws org.springframework.beans.BeansException */ public static BeanFactoryBootstrap getInstance() throws BeansException { if (startupException != null) throw startupException; // Really an assertion if (instance == null) throw new BootstrapException("Anomaly: instance and exception null", null); return instance; } /** * For testing only. Cleans and reinitalizes the instance. * Do not use in a production application! */ protected static void reinitialize() { instance = null; startupException = null; initializeSingleton(); } /** The Singleton instance */ private BeanFactory bootstrapFactory; /** * Apply rules to load factory. */ private BeanFactoryBootstrap() throws BeansException { DefaultListableBeanFactory startupFactory = new DefaultListableBeanFactory(); PropertiesBeanDefinitionReader propReader = new PropertiesBeanDefinitionReader(startupFactory); try { propReader.registerBeanDefinitions(System.getProperties()); this.bootstrapFactory = (BeanFactory) startupFactory.getBean(BEAN_FACTORY_BEAN_NAME); } catch (ClassCastException ex) { throw new BootstrapException("Bootstrap bean factory class does not implement BeanFactory interface", ex); } catch (NoSuchBeanDefinitionException ex) { throw new BootstrapException("No bean named '" + BEAN_FACTORY_BEAN_NAME + "' in system properties: [" + startupFactory + "]", null); } catch (BeansException ex) { throw new BootstrapException("Failed to bootstrap bean factory", ex); } } /** * Return the BeanFactory managed by the Bootstrap. */ public BeanFactory getBeanFactory() { return bootstrapFactory; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy