Spring源码笔记之SpringIOC--(2)从BeanDefinition到Bean实例

从BeanDefinition到Bean实例

对比SimpleBeanDefinitionRegistryDefaultListableBeanFactory的源码,中间省略一些无关紧要的逻辑:

SimpleBeanDefinitionRegistry.java

java 复制代码
public class SimpleBeanDefinitionRegistry extends SimpleAliasRegistry implements BeanDefinitionRegistry {

	/** Map of bean definition objects, keyed by bean name. */
	private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(64);
    
    @Override
	public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
			throws BeanDefinitionStoreException {
		this.beanDefinitionMap.put(beanName, beanDefinition);
    }
    
	@Override
	public BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException {
		BeanDefinition bd = this.beanDefinitionMap.get(beanName);
		if (bd == null) {
			throw new NoSuchBeanDefinitionException(beanName);
		}
		return bd;
	}
}

DefaultListableBeanFactory.java

java 复制代码
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
		implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {
	/** Map of bean definition objects, keyed by bean name. */
	private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
    @Override
	public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
			throws BeanDefinitionStoreException {
        // 实现比较复杂暂时省略
    }
    
	@Override
	public BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException {
        // 实现比较复杂暂时省略
	}
    
    @Override
    public Object getBean(String name) throws BeansException {
		assertBeanFactoryActive();
		return getBeanFactory().getBean(name);
	}
    
    @Override
	public <T> T getBean(Class<T> requiredType) throws BeansException {
		return getBean(requiredType, (Object[]) null);
	}
}

从类关系上来看DefaultListableBeanFactory不单单实现了BeanDefinitionRegistry,还实现了BeanFactory(继承了AbstractAutowireCapableBeanFactory)提供了获取bean实例的方法。分析其继承关系如下:
<<interface>> BeanDefinitionRegistry 注册BeanDefinition接口 <<interface>> BeanFactory ioc容器核心接口 <<interface>> ListableBeanFactory BeanFactory扩展,提供获取所有Bean的能力 <<interface>> AutowireCapableBeanFactory BeanFactory扩展,提供自动注入的能力 <<interface>> HierarchicalBeanFactory BeanFactory扩展,提供访问父容器的功能 <<interface>> ConfigurableBeanFactory 提供配置BeanFactory的能力 <<interface>> ConfigurableListableBeanFactory 提供配置、分析和修改bean定义,以及预实例化单例能力 DefaultListableBeanFactory Spring默认的BeanFactory实现

其中BeanFactory是IOC容器的核心

相关推荐
lee_curry9 分钟前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
码途漫谈35 分钟前
Easy-Vibe开发篇阅读笔记(四)——前端开发之结合 Agent Skills 美化界面
人工智能·笔记·ai·开源·ai编程
九转成圣1 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
直奔標竿2 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring
金銀銅鐵2 小时前
[java] 编译之后的记录类(Record Classes)长什么样子(上)
java·jvm·后端
糖炒栗子03263 小时前
【笔记】高分卫星影像 TIF 切片处理
笔记
Nice_Fold3 小时前
Kubernetes DaemonSet、StatefulSet与Service(自用笔记)
笔记·容器·kubernetes
野生技术架构师4 小时前
金三银四面试总结篇,汇总 Java 面试突击班后的面试小册
java·面试·职场和发展
小袁拒绝摆烂4 小时前
多表关联大平层转JSON树形结构
java·json