anchor.diff:  	
   	<!--- local bean factory id --->
   	<cfset variables.beanFactoryId = CreateUUId() />
  +	<!--- local struct to hold bean definitions --->
  +	<cfset variables.beanDefs = structnew()/>
  +	<!--- Optional parent bean factory --->
  +	<cfset variables.parent = 0>
  +	<!--- bean cache --->
   	<cfset variables.singletonCache = StructNew() />
   	<cfset variables.aliasMap = StructNew() />
  -	<cfset variables.known_bf_postprocessors = "coldspring.beans.factory.config.PropertyPlaceholderConfigurer" />
  +	<cfset variables.known_bf_postprocessors = "coldspring.beans.factory.config.PropertyPlaceholderConfigurer,coldspring.beans.factory.config.BeanFactoryLocator" />
  +	<cfset variables.known_bean_postprocessors = "coldspring.aop.framework.autoproxy.BeanNameAutoProxyCreator" />
   			
   	<cffunction name="init" access="private" returntype="void" output="false">
   		<cfthrow message="Abstract CFC cannot be initialized" />
   	</cffunction>
   	
  +	<cffunction name="getParent" access="public" returntype="coldspring.beans.AbstractBeanFactory" output="false">
  +		<cfif isObject(variables.parent)>
  +			<cfreturn variables.parent>
  +		<cfelse>
  +			<cfreturn createObject("component", "coldspring.beans.AbstractBeanFactory")>
  +		</cfif>
  +	</cffunction>
  +	
  +	<cffunction name="setParent" access="public" returntype="void" output="false">
  +		<cfargument name="parent" type="coldspring.beans.AbstractBeanFactory" required="true">
  +		<cfset variables.parent = arguments.parent>
  +	</cffunction>
  +	
   	<cffunction name="getBean" access="public" returntype="any" output="false">
   		<cfargument name="beanName" type="string" required="true" />
   		<cfthrow type="Method.NotImplemented">
  
positive.code: 	
  	<!--- begining with ColdSpring 1.5, we will use the abstract bean factory for all base implementations
  		  and keep only xml specific processing in DefaultXmlBeanFactory --->
  	<cffunction name="registerAlias" access="public" returntype="void" output="false">
  		<cfargument name="beanName" type="string" required="true" />
  		<cfargument name="alias" type="string" required="true" />
  		<cfset var duplicateAlias = "" />
  		<cfset var sys = CreateObject('java','java.lang.System') />
  		<cflock name="bf_#variables.beanFactoryId#.AliasMap" type="exclusive" timeout="5">
  			<cfif StructKeyExists(variables.aliasMap, arguments.alias)>
  				<cfset duplicateAlias = variables.aliasMap[arguments.alias] />
  			<cfelse>
  				<cfset variables.aliasMap[arguments.alias] = arguments.beanName />
  				<cfset sys.out.println("Registering alias #arguments.alias# for bean #arguments.beanName#")/>
  			</cfif>
  		</cflock>
  		
  
negative.code: 		</cflock>
  		
  		<cfif len(beanName)>
  			<!--- <cfset sys.out.println("Retrieved bean #beanName# for alias #arguments.name#")/> --->
  			<cfreturn beanName />
  		<cfelse>
  			<!--- <cfset sys.out.println("Bean name #arguments.name# is a proper bean")/> --->
  			<cfreturn name />
  		</cfif>
  	</cffunction>
  	
  	<cffunction name="getMergedBeanDefinition" access="public" returntype="coldspring.beans.BeanDefinition" output="false">
  		<cfargument name="beanName" type="string" required="true"/>
  		<cfset var beanDefinition = getBeanDefinition(arguments.beanName) />
  		<cfif beanDefinition.isChildDefinition() and not beanDefinition.isMerged()>
  			<cfreturn buildMergedBeanDefinition(arguments.beanName, beanDefinition) />
  		<cfelse>
  			<cfreturn beanDefinition />
  		</cfif>
  	</cffunction>
  	
  	<cffunction name="buildMergedBeanDefinition" access="private" returntype="coldspring.beans.BeanDefinition" output="false">
  		<cfargument name="beanName" type="string" required="true"/>
  		<cfargument name="beanDef" type="coldspring.beans.BeanDefinition" required="true"/>
  		<cfset var parentDef = 0 />
  		<cfset var mergedDef = 0 />
  		
  		<!---  we need to deal with potential errors, like parent is empty  --->
  		<cfset parentDef = getMergedBeanDefinition(arguments.beanDef.getParent()) />
  		<!--- create a new def prom parent and merge in child properties --->
  		<cfset mergedDef = CreateObject('component', 'coldspring.beans.BeanDefinition').initFromParent(parentDef) />
  		<cfset mergedDef.overrideProperties(arguments.beanDef) />
  		<cfset mergedDef.setMerged(true) />
  		<!--- we need to replace this bean def --->
  		<cfset variables.beanDefs[arguments.beanName] = mergedDef />
  		
  		<cfreturn mergedDef />
  		
  	</cffunction>
  
  </cfcomponent>