深入理解Spring系列之三:BeanFactory解析
2016-10-31 16:10
651 查看
《深入理解Spring系列之一:开篇》中提到在Spring容器启动的过程中,会将类解析成Spring内部的BeanDefinition结构,并将BeanDefinition存储到一个叫DefaultListableBeanFactory中,本篇将深入分析BeanFactory。
首先,看一下DefaultListableBeanFactory的类图,
![](https://img-blog.csdn.net/20161031160640896?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以看到DefaultListableBeanFactory间接实现了BeanFactory接口,先来分析一下这个BeanFactory,直接查看BeanFactory源代码,
从接口中的方法名可以很容易的理解每个方法的意图,最常用或者最常见的就是getBean方法,用于获取Bean的实例。BeanFactory是用于访问Spring Bean容器的根接口,是一个单纯的Bean工厂,也就是常说的IOC容器的顶层定义,各种IOC容器是在其基础上为了满足不同需求而扩展的,包括经常使用的ApplicationContext。
DefaultListableBeanFactory是整个Bean加载的核心部分,是Spring注册及加载Bean的默认实现。下面列出了DefaultListableBeanFactory源代码中两个重要的属性,
其中,bean的定义被解析成BeanDefinition,同时解析得到beanName,将beanName和BeanDefinition存储到beanDefinitionMap中,同时会将beanName存储到beanDefinitionNames中。
DefaultListableBeanFactory间接继承DefaultSingletonBeanRegistry,DefaultSingletonBeanRegistry中有如下属性,
singletonObjects用于存储单例bean的实例,getBean方法就是从这个Map里取实例对象。
首先,看一下DefaultListableBeanFactory的类图,
可以看到DefaultListableBeanFactory间接实现了BeanFactory接口,先来分析一下这个BeanFactory,直接查看BeanFactory源代码,
public interface BeanFactory { String FACTORY_BEAN_PREFIX = "&"; Object getBean(String name) throws BeansException; T getBean(String name, Class requiredType) throws BeansException; T getBean(Class requiredType) throws BeansException; Object getBean(String name, Object... args) throws BeansException; T getBean(Class requiredType, Object... args) throws BeansException; boolean containsBean(String name); boolean isSingleton(String name) throws NoSuchBeanDefinitionException; boolean isPrototype(String name) throws NoSuchBeanDefinitionException; boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException; boolean isTypeMatch(String name, Class typeToMatch) throws NoSuchBeanDefinitionException; Class getType(String name) throws NoSuchBeanDefinitionException; String[] getAliases(String name); }
从接口中的方法名可以很容易的理解每个方法的意图,最常用或者最常见的就是getBean方法,用于获取Bean的实例。BeanFactory是用于访问Spring Bean容器的根接口,是一个单纯的Bean工厂,也就是常说的IOC容器的顶层定义,各种IOC容器是在其基础上为了满足不同需求而扩展的,包括经常使用的ApplicationContext。
DefaultListableBeanFactory是整个Bean加载的核心部分,是Spring注册及加载Bean的默认实现。下面列出了DefaultListableBeanFactory源代码中两个重要的属性,
/** Map of bean definition objects, keyed by bean name */ private final Map beanDefinitionMap = new ConcurrentHashMap(256); /** List of bean definition names, in registration order */ private volatile List beanDefinitionNames = new ArrayList(256);
其中,bean的定义被解析成BeanDefinition,同时解析得到beanName,将beanName和BeanDefinition存储到beanDefinitionMap中,同时会将beanName存储到beanDefinitionNames中。
DefaultListableBeanFactory间接继承DefaultSingletonBeanRegistry,DefaultSingletonBeanRegistry中有如下属性,
/** Cache of singleton objects: bean name --> bean instance */ private final Map singletonObjects = new ConcurrentHashMap(256);
singletonObjects用于存储单例bean的实例,getBean方法就是从这个Map里取实例对象。
相关文章推荐
- 【SSH进阶之路】Spring的IOC逐层深入——源码解析之IoC的根本BeanFactory(五)
- 【SSH进阶之路】Spring的IOC逐层深入——源码解析之IoC的根本BeanFactory(五)
- 【SSH进阶之路】Spring的IOC逐层深入——源码解析之IoC的根本BeanFactory(五)
- Spring的IOC逐层深入——源码解析之IoC的根本BeanFactory(五)
- 深入理解Spring系列之六:bean初始化
- 【SSH进阶之路】Spring的IOC逐层深入——源码解析之IoC的根本BeanFactory(五)
- spring源码解析_BeanFactory
- Spring集成Hibernate 理解LocalSessionFactoryBean
- 读汤姆大叔 深入理解JavaScript系列(3):全面解析Module模式
- 深入理解JavaScript系列(3):全面解析Module模式
- 深入理解JavaScript系列(3):全面解析Module模式
- Spring之BeanFactory解析
- 深入理解JavaScript系列(3) 全面解析Module模式
- 深入理解JavaScript系列(3):全面解析Module模式(注释)
- Spring中ApplicationContext和beanfactory区别---解析一
- 深入理解JavaScript系列(3):全面解析Module模式
- 深入理解JavaScript系列(3):全面解析Module模式
- 【第二章:源码解析】Spring的BeanFactory的接口注解
- Spring BeanFactory、ApplicationContext层次结构和BeanDefinition解析过程
- 深入理解JavaScript系列(3):全面解析Module模式