1 Star 0 Fork 156

peng / Code-Analysis

forked from huifer / Code-Analysis 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
Spring-BeanComponentDefinition.md 2.08 KB
一键复制 编辑 原始数据 按行查看 历史

Spring BeanComponentDefinition

  • 类全路径: org.springframework.beans.factory.parsing.BeanComponentDefinition
  • BeanComponentDefinition 作为BeanDefinitionHolder的补充, 补充 BeanDefinition 中的 连接bean和内部bean

成员变量

	/**
	 * bean 定义列表
	 */
	private final BeanDefinition[] innerBeanDefinitions;

	/**
	 *  bean 连接列表
	 */
	private final BeanReference[] beanReferences;
  • 父类的成员变量

	/**
	 * bean 定义信息
	 */
	private final BeanDefinition beanDefinition;

	/**
	 * bean name
	 */
	private final String beanName;

	/**
	 * 别名列表
	 */
	@Nullable
	private final String[] aliases;

方法分析

构造函数

  • 这里着重关注构造函数org.springframework.beans.factory.parsing.BeanComponentDefinition.BeanComponentDefinition(org.springframework.beans.factory.config.BeanDefinitionHolder)
    • 构造函数主要将 BeanDefinitionHolder 的信息进行解析得到 BeanDefinitionBeanReference 详细代码逻辑如下
	public BeanComponentDefinition(BeanDefinitionHolder beanDefinitionHolder) {
		super(beanDefinitionHolder);

		List<BeanDefinition> innerBeans = new ArrayList<>();
		List<BeanReference> references = new ArrayList<>();
		// 从 beanDefinition 中获取 PropertyValues 
		PropertyValues propertyValues = beanDefinitionHolder.getBeanDefinition().getPropertyValues();
		// 循环 PropertyValues 对象中的元素
		for (PropertyValue propertyValue : propertyValues.getPropertyValues()) {
			Object value = propertyValue.getValue();
			// 类型判断 加入各自对应的集合中进行存储
			if (value instanceof BeanDefinitionHolder) {
				innerBeans.add(((BeanDefinitionHolder) value).getBeanDefinition());
			}
			else if (value instanceof BeanDefinition) {
				innerBeans.add((BeanDefinition) value);
			}
			else if (value instanceof BeanReference) {
				references.add((BeanReference) value);
			}
		}
		// 转换成array
		this.innerBeanDefinitions = innerBeans.toArray(new BeanDefinition[0]);
		this.beanReferences = references.toArray(new BeanReference[0]);
	}
Java
1
https://gitee.com/pengjian_ganzhou/code-analysis.git
git@gitee.com:pengjian_ganzhou/code-analysis.git
pengjian_ganzhou
code-analysis
Code-Analysis
master

搜索帮助