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,false); // 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 beanStruct = StructNew(); var Key = ""; // loop over bean tag attributes and create beanStruct keys For (key in bean.XmlAttributes) { if (key eq "factory-bean") { beanStruct.FactoryBean = bean.XmlAttributes[key]; }; if (key eq "factory-method") { beanStruct.FactoryMethod = bean.XmlAttributes[key]; }; if (key eq "singleton") { beanStruct.Singleton = bean.XmlAttributes[key]; }; if (key eq "class") { beanStruct.FullClassPath = bean.XmlAttributes[key]; }; if (key eq "id") { beanStruct.BeanName = bean.XmlAttributes[key]; }; if (key eq "init-method") { beanStruct.InitMethod = bean.XmlAttributes[key]; }; }; // if Singleton is not defined, or if beanStruct has a key Singleton eq false, create transient if (not (structKeyExists(beanStruct,"Singleton")) or (not beanStruct.Singleton)) { // if beanStruct contains key FactoryBean, then create transient from factory if (structKeyExists(beanStruct,"FactoryBean")) { addTransientFromFactory(argumentCollection=beanStruct); } else { addTransient(argumentCollection=beanStruct); }; } else { // if beanStruct contains key FactoryBean, then create singleton from factory if (structKeyExists(beanStruct,"FactoryBean")) { addSingletonFromFactory(argumentCollection=beanStruct); } else { addSingleton(argumentCollection=beanStruct); }; }; if (structKeyExists(arguments,"props")) { // add constructor dependecies and properties translateBeanChildren(arguments.bean,'constructor-arg',arguments.props); // add setter dependecies and properties translateBeanChildren(arguments.bean,'property',arguments.props); // add mixin dependecies and properties translateBeanChildren(arguments.bean,'mixin',arguments.props); } else { // add constructor dependecies and properties translateBeanChildren(arguments.bean,'constructor-arg'); // add setter dependecies and properties translateBeanChildren(arguments.bean,'property'); // add mixin dependecies and properties translateBeanChildren(arguments.bean,'mixin'); } var children = ""; var entries = ""; var hashMap = ""; var property = ""; var key = ""; var i = 1; var j = 1; // find all constructor properties and dependencies children = XMLSearch(bean,arguments.childTagName); for (i = 1; i lte ArrayLen(children); i = i + 1) { // child element "value" if (structKeyExists(children[i],"value")) { if ((structKeyExists(arguments,"props")) and (structKeyExists(arguments.props,children[i].XmlAttributes["name"]))) { property = arguments.props[#ReplaceList(children[i].value.XmlText,"${,}",",")#]; } else { property = children[i].value.XmlText; }; switch (arguments.childTagName) { case 'constructor-arg' : { addConstructorProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],property); }; break; case 'property' : { addSetterProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],property); }; break; case 'mixin' : { addMixinProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],property); }; break; }; }; // child element "map" if (structKeyExists(children[i],"map")) { entries = XMLSearch(children[i],'map/entry'); hashMap = structNew(); for (j = 1; j lte ArrayLen(entries); j = j + 1) { if (structKeyExists(entries[j],"value")) { hashMap[entries[j].XmlAttributes["key"]] = entries[j].value.XmlText; } else if (structKeyExists(entries[j],"ref")) { hashMap[entries[j].XmlAttributes["key"]] = entries[j].ref.XmlAttributes["bean"]; } } switch (arguments.childTagName) { case 'constructor-arg' : { addConstructorProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],hashMap); }; break; case 'property' : { addSetterProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],hashMap); }; break; case 'mixin' : { addMixinProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],hashMap); }; break; }; }; // child element "ref" if (structKeyExists(children[i],"ref")) { switch (arguments.childTagName) { case 'constructor-arg' : { addConstructorDependency(bean.XmlAttributes["id"],children[i].ref.XmlAttributes["bean"],children[i].XmlAttributes["name"]); }; break; case 'property' : { addSetterDependency(bean.XmlAttributes["id"],children[i].ref.XmlAttributes["bean"],children[i].XmlAttributes["name"]); }; break; case 'mixin' : { addMixinDependency(bean.XmlAttributes["id"],children[i].ref.XmlAttributes["bean"],children[i].XmlAttributes["name"]); }; break; }; }; //child element "bean" if (structKeyExists(children[i],"bean")) { // use recursion if (structKeyExists(arguments,"props")) { translateBean(children[i].bean,arguments.props); } else { translateBean(children[i].bean); } switch (arguments.childTagName) { case 'constructor-arg' : { addConstructorDependency(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],children[i].bean.XmlAttributes["id"]); }; break; case 'property' : { addSetterDependency(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],children[i].bean.XmlAttributes["id"]); }; break; case 'mixin' : { addMixinDependency(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],children[i].bean.XmlAttributes["id"]); }; break; }; }; };