困惑:谁能帮我解答一个关于BeanWrapperImpl设计的问题

   最近在分析Spring的源码,但对其中一个问题很困惑,现描述如下,希望各位帮忙分析一下:
   在IoC容器实例化Bean后,Bean只是个半成品,IoC容器将调用BeanWrapper的实现类BeanWrapperImp对这个实例进行属性值填充的后续工作。BeanWrapperImpl的类结构如下所示:
           PropertyEditorRegistry
                         |
               PropertyEditorRegistrySupport
                         |
BeanWrapper    AbstractPropertyAccessor
     |                   |
     |___________________|
                         |
                   BeanWrapperImpl

   在PropertyEditorRegistrySupport中定义了两个Map类型的defaultEditors和customEditors,用于存放常见类型(String Integer等原子类型)和自定义类型的属性编辑器。
   	private Map defaultEditors;
	private Map customEditors;

   所以,BeanWrapperImpl也拥有继承了这些编辑器,但是我有一点不明白的是,为什么BeanWrapperImpl不是容器级的,而是Bean级的:即在容器主控制程序中,每实例化一个Bean时,都要new一个BeanWrapperImpl实例出来,请看:
	protected BeanWrapper instantiateBean(String beanName, 
                       RootBeanDefinition mergedBeanDefinition) 
                   throws BeansException {

		Object beanInstance = getInstantiationStrategy().instantiate(mergedBeanDefinition, beanName, this);
		[b]BeanWrapper bw = new BeanWrapperImpl(beanInstance);[/b]
		initBeanWrapper(bw);
		return bw;
	}

    这样一来属性编辑器的实例会被多次创建,因为每个BeanWrapperImpl对应一套属性编辑器,而在我看来这些属性编辑器应该是容器级的,也就是说只要保存一份就可以了,现在的情况是每创建一个Bean都对应一份,不但没有必要,而且浪费资源。
    不知道是我没有看出其中的机巧,还是Rod的设计失误,请大家帮助分析一下,不胜感激。

你可能感兴趣的:(spring,jvm,bean,prototype,IOC)