Spring | (一)BeanDefinition

Published on with 0 views and 0 comments

关于beanDefinition 的第一篇笔记 一共三篇 https://blog.csdn.net/java_lyvee/article/details/102633067

20191018151632339.png

beanDefinition:org.springframework.beans.factory.config.BeanDefinition
常用子类:org.springframework.beans.factory.support.GenericBeanDefinition
描述每个bean的定义,dependsOn,scope,lazy,beanClassName等

启动过程:

  1. 扫描
  2. parse------beanDefinition object ----map<"xxx",o>
  3. validate
  4. life-------遍历beanDefinitionMap,得到beanDefinition,实例化object

容器: 由spring各个组件组成

  • singletonObjects : ConcurrentHashMap 单例池,容器的一部分
  • beanDefinitionMap
  • beanFactory
  • 后置处理器

BeanFactoryPostprocessor: 扫描完成后调用

BeanDefinition的各个实现:

  • RootBeanDefinition:父节点,不能做子节点,调用setParentName方法时会抛出异常。
  • ChildBeanDefinition:子节点,构造方法必须传入parentName,没有无参构造。
  • GenericBeanDefinition:spring2.5以后,首选GenericBeanDefinition。

RootBeanDefinition.setParentName:

	@Override
	public void setParentName(@Nullable String parentName) {
		if (parentName != null) {
			throw new IllegalArgumentException("Root bean cannot be changed into a child bean with parent reference");
		}
	}

ChildBeanDefinition构造方法

    public ChildBeanDefinition(String parentName) {
		super();
		this.parentName = parentName;
	}

GenericBeanDefinition可以完全代替ChildBeanDefinition,但是不能完全代替RootBeanDefinition,因为GenericBeanDefinition和RootBeanDefinition在merge后只能用RootBeanDefinition接收。

BeanDefinition类图:
BeanDefinition关系图.png


标题:Spring | (一)BeanDefinition
作者:fyzzz
地址:https://fyzzz.cn/articles/2020/04/29/1588167411754.html