/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.object;
import org.mule.runtime.core.api.MuleContext;
import org.mule.runtime.api.lifecycle.InitialisationException;
import java.util.Map;
/**
* Creates an instance of the object once and then always returns the same instance.
*/
public class SingletonObjectFactory extends AbstractObjectFactory {
private Object instance;
/**
* For Spring only
*/
public SingletonObjectFactory() {
super();
}
public SingletonObjectFactory(String objectClassName) {
super(objectClassName);
}
public SingletonObjectFactory(String objectClassName, Map properties) {
super(objectClassName, properties);
}
public SingletonObjectFactory(Class objectClass) {
super(objectClass);
}
public SingletonObjectFactory(Class<?> objectClass, Map properties) {
super(objectClass, properties);
}
/**
* Create the singleton based on a previously created object.
*/
public SingletonObjectFactory(Object instance) {
super(instance.getClass());
this.instance = instance;
}
@Override
public void dispose() {
instance = null;
super.dispose();
}
/**
* Always returns the same instance of the object.
*
* @param muleContext
*/
@Override
public Object getInstance(MuleContext muleContext) throws Exception {
if (instance == null) {
try {
instance = super.getInstance(muleContext);
} catch (Exception e) {
throw new InitialisationException(e, this);
}
}
return instance;
}
@Override
public Class<?> getObjectClass() {
if (instance != null) {
return instance.getClass();
} else {
return super.getObjectClass();
}
}
@Override
public boolean isSingleton() {
return true;
}
}