本文主要是介绍Spring源码笔记之SpringIOC--(2)从BeanDefinition到Bean实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从BeanDefinition到Bean实例
对比SimpleBeanDefinitionRegistry
和DefaultListableBeanFactory
的源码,中间省略一些无关紧要的逻辑:
SimpleBeanDefinitionRegistry.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);@Overridepublic void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)throws BeanDefinitionStoreException {this.beanDefinitionMap.put(beanName, beanDefinition);}@Overridepublic BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException {BeanDefinition bd = this.beanDefinitionMap.get(beanName);if (bd == null) {throw new NoSuchBeanDefinitionException(beanName);}return bd;}
}
DefaultListableBeanFactory.java
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactoryimplements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {/** Map of bean definition objects, keyed by bean name. */private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);@Overridepublic void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)throws BeanDefinitionStoreException {// 实现比较复杂暂时省略}@Overridepublic BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException {// 实现比较复杂暂时省略}@Overridepublic Object getBean(String name) throws BeansException {assertBeanFactoryActive();return getBeanFactory().getBean(name);}@Overridepublic <T> T getBean(Class<T> requiredType) throws BeansException {return getBean(requiredType, (Object[]) null);}
}
从类关系上来看DefaultListableBeanFactory
不单单实现了BeanDefinitionRegistry
,还实现了BeanFactory
(继承了AbstractAutowireCapableBeanFactory
)提供了获取bean实例的方法。分析其继承关系如下:
其中BeanFactory
是IOC容器的核心
这篇关于Spring源码笔记之SpringIOC--(2)从BeanDefinition到Bean实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!