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的资料请关注易盾网络其它相关文章!