java单例注册表_Spring对单例的底层实现,单例注册表
public abstract class AbstractBeanFactory implementsConfigurableBeanFactory{/*** 充当了Bean实例的缓存,实现方式和单例注册表相同*/
private final Map singletonCache=newHashMap();public Object getBean(String name)throwsBeansException{return getBean(name,null,null);
}
...public Object getBean(String name,Class requiredType,Object[] args)throwsBeansException{//对传入的Bean name稍做处理,防止传入的Bean name名有非法字符(或则做转码)
String beanName=transformedBeanName(name);
Object bean=null;//手工检测单例注册表
Object sharedInstance=null;//使用了代码锁定同步块,原理和同步方法相似,但是这种写法效率更高
synchronized(this.singletonCache){
sharedInstance=this.singletonCache.get(beanName);
}if(sharedInstance!=null){
...//返回合适的缓存Bean实例
bean=getObjectForSharedInstance(name,sharedInstance);
}else{
...//取得Bean的定义
RootBeanDefinition mergedBeanDefinition=getMergedBeanDefinition(beanName,false);
...//根据Bean定义判断,此判断依据通常来自于组件配置文件的单例属性开关如果是单例,做如下处理
if(mergedBeanDefinition.isSingleton()){synchronized(this.singletonCache){//再次检测单例注册表
sharedInstance=this.singletonCache.get(beanName);if(sharedInstance==null){
...try{//真正创建Bean实例
sharedInstance=createBean(beanName,mergedBeanDefinition,args);//向单例注册表注册Bean实例
addSingleton(beanName,sharedInstance);
}catch(Exception ex) {
...
}finally{
...
}
}
}
bean=getObjectForSharedInstance(name,sharedInstance);
}//如果是非单例,即prototpye,每次都要新创建一个Bean实例//
else{
bean=createBean(beanName,mergedBeanDefinition,args);
}
}
...returnbean;
}
}
java单例注册表_Spring对单例的底层实现,单例注册表相关推荐
- 由于单表数据已经达到2000万数据,所以想分表,现假如分1000万为一单表,例有如一两个表:
由于单表数据已经达到2000万数据,所以想分表,现假如分1000万为一单表,例有如一两个表: 表a: id title 1 张三 2 李四 ............ 表b: id ...
- 此表单只能填写一次_暴雪战网国服账号修改邮箱只能填写表单申请
暴雪战网国服账号只认身份信息,注册必须实名,而且实名信息千万不要乱填,不然账号出现问题,需要上传证件图片的,客服会核实与注册实名内容是否一致,不然无法帮助玩家解决一些问题. 国服账号邮箱没有什么权限, ...
- table中加表单元素每行怎么验证_Validform 一行代码搞定整站的表单验证 - 文章
Validform 一行代码搞定整站的表单验证,为什么能如此方便?插件的核心思想就是把所有的验证条件及验证提示信息绑定到每个表单元素,让验证代码在执行时只是核对表单下各元素的值是否跟绑定的验证条件相符 ...
- java 迪杰斯特拉_Java 实现Dikstra迪杰斯特拉算法 关于单源顶点最短路径问题的求解...
Dijkstra算法是按照路径长度递增的方法计算某一点到其余各顶点的最短路径.其算法的基本思想是:把图中所有顶点分成两组,第一组包括已确定最短路径的顶点(初始只包括源点v0),第二组包括尚未确定最短路 ...
- html表单代码例子_关于React的这些细节,你知道吗?-表单
在 React 里,HTML 表单元素的工作方式和其他的 DOM 元素有些不同,这是因为表单元素通常会保持一些内部的 state.例如这个纯 HTML 表单只接受一个名称: 此表单具有默认的 HTML ...
- C语言丨线性表(二):线性链表(单链表)
线性表是由数据类型相同的个数据元素组成的有限序列,通常记为: 其中n为表长,n=0时称为空表:下标i表示数据元素的位序. 线性表的特点是组成它的数据元素之间是一种线性关系,即数据元素"一个接 ...
- 需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 。 A 单链表 B 静态链表 C 线性链表 D 顺序存储结构
1.需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 . A 单链表 B 静态链表 C 线性链表 D 顺序存储结构 答案:B 2.静态链表中指针表示的是() A 内存地址 B下一元素地 ...
- 考研数据结构之线性表(1.7)——练习题之分离单链表的奇数偶数(C表示)
题目 设计一个算法,将一个头结点为A的单链表(其数据域为整数)分解成两个单链表A和B.使得A链表只含有原来链表中data 域为奇数的结点,而B链表只含有原链表中data城为偶数的结点,且保持原来的相对 ...
- el-upload在表单循环中,实现选择,删除,拖拽,并且和表单数组对上
el-upload在表单循环中,实现选择,删除,拖拽,并且和表单数组对上: 微信: volley369 业务要求,实现以下效果: 业务要求: el-upload肯定不能一个个的写,要用json去循环 ...
- mysql单表数据列_MySQL 之 数据操作及单表查询
1.数据操作 (1)insert 增加数据 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3-字段n) VALUES(值1,值2,值3-值n); 语法二: ...
最新文章
- python基础语法3_python基础语法三
- 大道至简_阅读笔记02
- 统计内表行数常用的三种方法
- Java8使用Stream的缺点是调试困难?教你一招你就不会这么认为了
- 诗与远方:无题(八十九)
- python print 变量_0、python 的 print()函数、变量和赋值
- vue(一)vue-cli安装
- 如何连接oracle 12c可插拔数据库
- 计算机网络是一个_______,计算机网络习题一、名词解释计算机网络,网络拓扑结构二、填空题1.计算机网络是__________与__________结...
- 搭建 Extmail企业邮件服务
- EDR端点检测与响应
- 淘宝自定义API接口管理
- 介质访问控制MAC以及ALOHA协议
- 【简易版】mac安装mysql5.7.31
- 解决Pyinstaller打包文件太大的办法(绝对有效,亲测!!!)
- 对程序员而言,有什么终身受用的底层知识?
- 利用进程池多进程爬取人人车信息
- [转]给SSD(固态硬盘)编程
- 一周极客热文:Java开发的10位牛人
- 服务器上进行java项目部署