setLazyLoad("true");
addBean(FullClassPath, BeanName, 1, InitMethod);
addBean(FullClassPath, BeanName, 0, InitMethod);
// Default the name to the name of the bean if no name list is provided.
If (Len(trim(BeanName)) LT 1)
{
BeanName = ListLast(FullClassPath,".");
};
// Set the config properties for the Singleton
// Create the necessary struct
variables.config[BeanName] = StructNew();
// Set it as a Singleton
variables.config[BeanName].Singleton = Singleton;
// Set the path
variables.config[BeanName].Path = FullClassPath;
// Save the initi method
variables.config[BeanName].InitMethod = InitMethod;
// Initialize the dependency lists
variables.config[BeanName].ConstructorDependencies = "";
variables.config[BeanName].SetterDependencies = "";
variables.config[BeanName].MixinDependencies = "";
variables.config[BeanName].ConstructorDependencyStruct = StructNew();
variables.config[BeanName].SetterDependencyStruct = StructNew();
variables.config[BeanName].MixinDependencyStruct = StructNew();
addBeanFromFactory(FactoryBean, FactoryMethod, BeanName, 1);
addBeanFromFactory(FactoryBean, FactoryMethod, BeanName, 0);
// Set the config properties for the Singleton
// Create the necessary struct
variables.config[BeanName] = StructNew();
// Set it as a Singleton
variables.config[BeanName].Singleton = Singleton;
// Set the Factory bean
variables.config[BeanName].FactoryBean = FactoryBean;
// Set the Factory method
variables.config[BeanName].FactoryMethod = FactoryMethod;
// Initialize the dependency lists
variables.config[BeanName].ConstructorDependencies = "";
variables.config[BeanName].SetterDependencies = "";
variables.config[BeanName].MixinDependencies = "";
// Add the constructor dependencies
variables.config[BeanName].ConstructorDependencies = ListAppend(variables.config[BeanName].ConstructorDependencies, InjectedBeanName);
If (len(PropertyName) LT 1)
{PropertyName = InjectedBeanName;};
variables.config[BeanName].ConstructorDependencyStruct[InjectedBeanName] = PropertyName;
// Add the setter dependencies
variables.config[BeanName].SetterDependencies = ListAppend(variables.config[BeanName].SetterDependencies, InjectedBeanName);
If (len(PropertyName) LT 1)
{PropertyName = InjectedBeanName;};
variables.config[BeanName].SetterDependencyStruct[InjectedBeanName] = PropertyName;
// Add the mixin dependencies
variables.config[BeanName].MixinDependencies = ListAppend(variables.config[BeanName].MixinDependencies, InjectedBeanName);
If (len(PropertyName) LT 1)
{PropertyName = InjectedBeanName;};
variables.config[BeanName].MixinDependencyStruct[InjectedBeanName] = PropertyName;
// Add the constructor property
variables.config[BeanName].ConstructorProperties[PropertyName] = PropertyValue;
// Add the setter property
variables.config[BeanName].SetterProperties[PropertyName] = PropertyValue;
// Add the mixin property
variables.config[BeanName].MixinProperties[PropertyName] = PropertyValue;
var i = 0;
// parse coldspring xml bean config
var xml = XMLParse(arguments.XMLFilePath);
// use XMLSearch to create array of all bean defs
var beans = XMLSearch(xml,'/beans/bean');
// loop over beans to create singleton or transient
For (i = 1; i lte ArrayLen(beans); i = i + 1)
{
if (structKeyExists(arguments,"properties"))
{
translateBean(beans[i],arguments.properties);
}
else
{
translateBean(beans[i]);
}
}
var constructors = "";
var setters = "";
var entries = "";
var hashMap = "";
var property = "";
var key = "";
var i = 1;
var j = 1;
var k = 1;
var l = 1;
var m = 1;
// if bean definition is a product of a factory method, assume transient
if (StructKeyExists(bean.XmlAttributes,"factory-bean") and StructKeyExists(bean.XmlAttributes,"factory-method"))
{
addTransientFromFactory(bean.XmlAttributes["factory-bean"],bean.XmlAttributes["factory-method"],bean.XmlAttributes["id"]);
}
// if bean definition uses singleton="false"
else if (StructKeyExists(bean.XmlAttributes,"singleton") and (bean.XmlAttributes["singleton"] eq "false"))
{
addTransient(bean.XmlAttributes["class"],bean.XmlAttributes["id"]);
}
// assume singleton
else
{
addSingleton(bean.XmlAttributes["class"],bean.XmlAttributes["id"]);
}
// find all constructor properties and dependencies
constructors = XMLSearch(bean,'constructor-arg');
for (j = 1; j lte ArrayLen(constructors); j = j + 1)
{
// child element "value"
if (structKeyExists(constructors[j],"value"))
{
if ((structKeyExists(arguments,"props")) and (structKeyExists(arguments.props,constructors[j].XmlAttributes["name"])))
{
property = arguments.props[#ReplaceList(constructors[j].value.XmlText,"${,}",",")#];
}
else
{
property = constructors[j].value.XmlText;
}
addConstructorProperty(bean.XmlAttributes["id"],constructors[j].XmlAttributes["name"],property);
}
// child element "map"
if (structKeyExists(constructors[j],"map"))
{
entries = XMLSearch(constructors[j],'map/entry');
hashMap = structNew();
for (l = 1; l lte ArrayLen(entries); l = l + 1)
{
if (structKeyExists(entries[l],"value"))
{
hashMap[entries[l].XmlAttributes["key"]] = entries[l].value.XmlText;
}
else if (structKeyExists(entries[l],"ref"))
{
hashMap[entries[l].XmlAttributes["key"]] = entries[l].ref.XmlAttributes["bean"];
}
}
addConstructorProperty(bean.XmlAttributes["id"],constructors[j].XmlAttributes["name"],hashMap);
}
// child element "ref"
if (structKeyExists(constructors[j],"ref"))
{
addConstructorDependency(bean.XmlAttributes["id"],constructors[j].ref.XmlAttributes["bean"],constructors[j].XmlAttributes["name"]);
}
//child element "bean"
if (structKeyExists(constructors[j],"bean"))
{
// use recursion
if (structKeyExists(arguments,"props"))
{
translateBean(constructors[j].bean,arguments.props);
}
else
{
translateBean(constructors[j].bean);
}
addConstructorDependency(bean.XmlAttributes["id"],constructors[j].XmlAttributes["name"],constructors[j].bean.XmlAttributes["id"]);
}
}
// find all setter properties and dependencies
setters = XMLSearch(bean,'property');
for (k = 1; k lte ArrayLen(setters); k = k + 1)
{
if (structKeyExists(setters[k],"value"))
{
if (structKeyExists(arguments,"props") and (structKeyExists(arguments.props,setters[k].XmlAttributes["name"])))
{
property = arguments.props[#ReplaceList(setters[k].value.XmlText,"${,}",",")#];
}
else
{
property = setters[k].value.XmlText;
}
addConstructorProperty(bean.XmlAttributes["id"],setters[k].XmlAttributes["name"],property);
}
if (structKeyExists(setters[k],"map"))
{
entries = XMLSearch(setters[k],'map/entry');
hashMap = structNew();
for (m = 1; m lte ArrayLen(entries); m = m + 1)
{
if (structKeyExists(entries[m],"value"))
{
hashMap[entries[m].XmlAttributes["key"]] = entries[m].value.XmlText;
}
else if (structKeyExists(entries[m],"ref"))
{
hashMap[entries[m].XmlAttributes["key"]] = entries[m].ref.XmlAttributes["bean"];
}
}
addConstructorProperty(bean.XmlAttributes["id"],setters[k].XmlAttributes["name"],hashMap);
}
if (structKeyExists(setters[k],"ref"))
{
addSetterDependency(bean.XmlAttributes["id"],setters[k].ref.XmlAttributes["bean"],setters[k].XmlAttributes["name"]);
}
//child element "bean"
if (structKeyExists(setters[k],"bean"))
{
// use recursion
if (structKeyExists(arguments,"props"))
{
translateBean(setters[k].bean,arguments.props);
}
else
{
translateBean(setters[k].bean);
}
addConstructorDependency(bean.XmlAttributes["id"],setters[k].XmlAttributes["name"],setters[k].XmlAttributes["name"]);
}
}