博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解Spring系列之三:BeanFactory解析
阅读量:6496 次
发布时间:2019-06-24

本文共 2060 字,大约阅读时间需要 6 分钟。

中提到在Spring容器启动的过程中,会将类解析成Spring内部的BeanDefinition结构,并将BeanDefinition存储到一个叫DefaultListableBeanFactory中,本篇将深入分析BeanFactory。

首先,看一下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里取实例对象。

转载地址:http://ftuyo.baihongyu.com/

你可能感兴趣的文章
云计算教学实践40:open***架构实施方案(一)跨机房异地灾备
查看>>
Vue和React的对比
查看>>
MyBatis 源码解析 —— SqlSessionFactory
查看>>
如何解决CentOS 7.*无法使用tab补全功能
查看>>
ORA-00119: invalid specification for system par...
查看>>
rpc.rstatd-4.0.1.tar.gz安装问题
查看>>
【虚拟化实战】VM设计之三内存资源控制
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
Linux+Nginx+MySql+Php既LNMP源码安装
查看>>
BACKUP DATABASE 失败的处理方法
查看>>
NTP服务
查看>>
Shell 自动化安装Apache,并配置虚拟主机
查看>>
模板实现顺序表
查看>>
curl工具的使用
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
最近在MyEclipse中导入jquery出现的错误,与解决办法
查看>>
js实现模态弹窗
查看>>
Debugging information cannot be found or does not match
查看>>
我的友情链接
查看>>
apache负载均衡apache2.4.18+tomcat7(windows版)
查看>>