/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.util;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
/**
* Base class for building Spring factories for singleton objects.
* @param <T> the type of the factory bean
*/
public abstract class SingletonFactoryBean<T> implements FactoryBean<T>, InitializingBean {
/**
* The singleton instance.
*/
private T _instance;
/**
* Override this to create the instance.
* @return the created object
*/
protected abstract T createObject();
@Override
public final T getObject() {
//System.out.println ("getObject on " + getClass () + " returning " + _instance);
return _instance;
}
/**
* Gets the object, creating if necessary.
*
* @return the object
*/
public final T getObjectCreating() {
T object = getObject();
if (object == null) {
object = createObject();
}
return object;
}
@Override
public final Class<?> getObjectType() {
T obj = getObject();
if (obj == null) {
return null;
} else {
return obj.getClass();
}
}
@Override
public final boolean isSingleton() {
return true;
}
@Override
public void afterPropertiesSet() {
_instance = createObject();
//System.out.println ("afterPropertiesSet called on " + getClass ());
}
}