Spring源码笔记之SpringIOC--(4)BeanFactory的扩展之HierarchicalBeanFactory

举报
早点下班 发表于 2024/02/06 17:46:26 2024/02/06
【摘要】 BeanFactory的扩展之HierarchicalBeanFactory先引用BeanFactory的类继承关系图来看一下HierarchicalBeanFactory的位置«interface»BeanDefinitionRegistry注册BeanDefinition接口«interface»BeanFactoryioc容器核心接口«interface»ListableBeanFa...

BeanFactory的扩展之HierarchicalBeanFactory

先引用BeanFactory的类继承关系图来看一下HierarchicalBeanFactory的位置

«interface»BeanDefinitionRegistry注册BeanDefinition接口«interface»BeanFactoryioc容器核心接口«interface»ListableBeanFactoryBeanFactory扩展,提供获取所有Bean的能力«interface»AutowireCapableBeanFactoryBeanFactory扩展,提供自动注入的能力«interface»HierarchicalBeanFactoryBeanFactory扩展,提供访问父容器的功能«interface»ConfigurableBeanFactory提供配置BeanFactory的能力«interface»ConfigurableListableBeanFactory提供配置、分析和修改bean定义,以及预实例化单例能力DefaultListableBeanFactorySpring默认的BeanFactory实现

HierarchicalBeanFactoryBeanFactory分层功能的扩展,它提供了BeanFactory分层嵌套的能力。即一个BeanFactory可以引用另外一个BeanFactory作为其父容器。HierarchicalBeanFactory源码目前只提供了两个接口,其源码如下:

public interface HierarchicalBeanFactory extends BeanFactory {
    // 返回其父容器BeanFactory
	@Nullable
	BeanFactory getParentBeanFactory();
    
    // 当前容器下是否包含bean,不会去搜寻父容器
    boolean containsLocalBean(String name);
}

在实际使用过程会通过引用父容器parent实现BeanFactory的嵌套调用,如下

public MyBeanFactory implement HierarchicalBeanFactory{
    private BeanFactory parent;
    
    private BeanFactory beanFactory;
    
    // 返回父容器parent
    @Override
	@Nullable
    public BeanFactory getParentBeanFactory() {
		return this.parent;
	}
    
    // 根据当前容器判断是否存在Bean
    @Override
	public boolean containsBeanDefinition(String beanName) {
		return this.beanFactory.containsBeanDefinition(beanName);
	}
    
}

这种关系有点类似与单链表

parnet
parnet
parnet
BeanFactoryA
BeanFactoryB
BeanFactory...
BeanFactoryN
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。