BeanDefiton是什么? BeanDefition是Spring对POJO的抽象,通过BeanDefition来更好地创建、管理Bean。 定义 含义 beanClassName bean的类名。该属性并不总是对应着bean真正使用的类的名称。bean通过某个类
          BeanDefiton是什么?
BeanDefition是Spring对POJO的抽象,通过BeanDefition来更好地创建、管理Bean。
AbstractBeanDefition
AbstractBeanDefition是对BeanDefition的补充,定义了一些公共配置和公共能力,不加以赘述。
全功能的BeanDefiton
RootBeanDefinition
不能设置parentbean定义,他本身就是根
ChildBeanDefinition
必须设置parent bean定义,而且必须通过构造函数指定
GenricBeanDefinition
动态设置parent bean,也可以不设置parent beand 相对更加灵活
MergedBeanDefinition
笔者在阅读Spring源码时,注意到MergedBeanDefinition和getMergedLocalBeanDefinition方法,而MergedBeanDefition只是Spring中一个抽象的BeanDefition概念,其本质上是一个RootBeanDefinition。
MergedBeanDefinition从中文上理解是合并的bean,上文提到BeanDefition中规范了parentbean,Spring会检查bean对应的BeanDefitione,智能合并bean与parentbean。
通过getMergedLocalBeanDefinition方法摘要,加深一下理解。
synchronized (this.mergedBeanDefinitions) {
		//mbd->mergedBeanDefinition
		RootBeanDefinition mbd = null;
		RootBeanDefinition previous = null;
		if (mbd == null || mbd.stale) {
			previous = mbd;
      /** bd.getParentName() == null 代表着
      	该beanDefition是一个RootBeanDefition
        或者该beanDefition是一个没有parentBean的GenricBeanDefition
      **/
			if (bd.getParentName() == null) {
					if (bd instanceof RootBeanDefinition) {
						mbd = ((RootBeanDefinition) bd).cloneBeanDefinition();
					}
					else {
						mbd = new RootBeanDefinition(bd);
					}
			}
      /**该beanDefition是一个ChildBeanDefition**/
			else {
				BeanDefinition pbd;
				String parentBeanName = transformedBeanName(bd.getParentName());
				if (!beanName.equals(parentBeanName)) {
					pbd = getMergedBeanDefinition(parentBeanName);
				}
				else {
					BeanFactory parent = getParentBeanFactory();
					if (parent instanceof ConfigurableBeanFactory) {
          /递归式调用/
					pbd = ((ConfigurableBeanFactory) parent).getMergedBeanDefinition(parentBeanName);
					}
					mbd = new RootBeanDefinition(pbd);
					mbd.overrideFrom(bd);
				}
			}
			return mbd;
}
	
以上就是详解SpringIOC BeanDeifition的详细内容,更多关于SpringIOC BeanDeifition的资料请关注易盾网络其它相关文章!
