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"]); } }