- 博客(19)
- 收藏
- 关注
原创 从源码层面解读spring中bean的循环依赖解决方案(5)
写在前面的话废话不多说这是接系列文章3里面提到ObjectFactory的核心部分其实只是调用了createBean方法,还需要深入createBean方法才能得出最终的结果。本片我们就进入createBean方法,用源码层面看准备创建bean时都做了什么。createBean方法 准备创建bean我们先看createBean方法的源码。/** * Central method of this class: creates a bean instance, * populates the
2022-01-16 17:03:59 297
原创 从源码层面解读spring中bean的循环依赖解决方案(4)
写在前面的话源码层面解读spring中bean的循环依赖解决方案系列来到了最终章,我们主要研究spring如何从bean的实例中获取对象。从bean的实例中获取对象在getBean的方法中,getObjectForBeanInstance是一个高频使用的方法,无论是从缓存中获取还是从不同的scope策略加载bean。这个方法的主要作用就是检测当前bean是否是FactoryBean类型的bean,如果是,就需要条用该bean队友的FactoryBean实例中的getObject()作为放回值。
2022-01-09 20:15:29 330
原创 从源码层面解读spring中bean的循环依赖解决方案(3)
写在前面的话其实这一篇文章已经脱离了依赖循环的范畴了,上一篇文章已经解释循环依赖的解决方案了,但是还没有讲解完善,这一篇就让我们再深入理一下吧。在之前先一些问题进行详细的探讨。主要探讨以下几个问题,如何将bean初始化,在什么时候初始化,如果缓存中没有bean时会怎么办?第一个问题如何将bean初始化。初始化bean在bean的配置时bean中一个init-method的属性。这个属性的作用就是在bean实例化之前调用init-method指定的方法来根据用户业务进行相应的实例化。这个方法的
2022-01-06 05:00:00 149
原创 从源码层面解读spring中bean的循环依赖解决方案(2)
写在前面的话我们最终都要远行,最终都要跟稚嫩的自己告别。也许路途注定艰辛,注定孤独,但熬过了痛苦,我们才能得以成长,要知道生活把我们磨圆是为了让我们滚得更远。之前我们已经结束了依赖循环的定义种类和解决原理,接下来我们从源码层面来解读下spring是如何实现的解决依赖循环。让我们先了解一些前置知识点,FactoryBeanFactoryBean是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个作用是:可以让我们自定义Bean的创建过程。一般情况下,Spring是通过反射机制利
2022-01-04 06:00:00 227
原创 从源码层面解读spring中bean的循环依赖解决方案
写在前面的话正逢立冬,北风潜入悄无声,未品浓秋已立冬。寒潮来袭,气温骤降,当下室外温度为7°,成都这一轮的新冠也扰人不得安宁,致敬在抗疫一线工作的英雄们。什么是循环依赖?循环依赖就是循环引用,就是两个或者多个bean相互之间的持有对方,比如A引用B,B引用C,而C又引用A,这样它们就最终反映为一个环。注意这里不是循环调用,循环调用是方法之间的环调用,循环调用是无法解决的,除非有终结条件,否则就是死循环,最终会导致内存溢出错误。spring如何解决依赖循环先说分类,spring的循环依赖分为
2022-01-02 01:16:56 134
原创 使用atomikos 如何实现 JTA/XA全局事务
写在前面的话最近终于忙完了自考的事情,可以有更多的时间总结了。久违的国家考试,听着广播里播放着考试相关的信息,以及感受着考场上紧张的氛围,突然还很怀念。这样的机会真是越来越少呢。什么是JTA在介绍atomikos先介绍下JTA。首先JTA是一个规范。Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分布式事务服务(distributed transaction)的能力
2020-11-01 22:41:55 679 1
原创 分布式事务的介绍和实现方式简介
写在前面的话跑步确实是有用的,尽管体重变化不明显,但是体型变化就比较明显了。像她明天会出现那样期待,像她永远不会来那样生活。事务简介这里套用在百度百科中的解释:事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。
2020-10-04 23:43:54 359
原创 解读分布式锁及其实现方式
写在前面的话备考就像黑屋子里洗衣服,你不知道洗干净没有,只能一遍一遍去洗。等到上了考场的那一刻,灯光亮了。你发现只要你认真洗过,那件衣服光亮如新,而你以后每次穿上那件衣服都会想起那段岁月。为什么需要分布式锁?1.为了防止分布式系统中的多个进程之间相互干扰,需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。2.为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行。分布式锁是什么?分布式锁是控制分布式系统之间同步访问共享资源的一种方式
2020-09-13 23:57:46 217
原创 TreeSet源码解析以及与HashSet和HashMap的区别
继承关系1.实现Serializable接口,即支持序列化。2.TreeSet实现了Cloneable接口,意味着它能被克隆。3.实现Iterable接口,即能用foreach使用迭代器遍历得到集合元素。4.TreeSet实现了NavigableSet接口,意味着它支持一系列的导航方法。比如查找与指定目标最匹配项。5.继承AbstractSet,AbstractSet实现set,所以它是一个Set集合,不包含满足element1.eauqals(element2)的元素树,不重复,并且最多包含
2020-09-06 23:25:21 130
原创 TreeMap源码解读及底层结构红黑树介绍
继承关系1.TreeMap存储K-V键值对,通过红黑树(R-B tree)实现;2.TreeMap继承了NavigableMap接口,NavigableMap接口继承了SortedMap接口,可支持一系列的导航定位以及导航操作的方法,当然只是提供了接口,需要TreeMap自己去实现;3.TreeMap实现了Cloneable接口,可被克隆,实现了Serializable接口,可序列化;4.TreeMap因为是通过红黑树实现,红黑树结构天然支持排序,默认情况下通过Key值的自然顺序进行排序;基本属
2020-08-31 00:07:46 430
原创 ConcurrentHashMap1.8源码解读及如何保证线程安全
写在前面的话不应该在意起点,而要看向将要去到的地方。继承关系具体解释可看之前的文章底层结构1.8的数据结构摒弃了分段锁的概念,启用 node + CAS + Synchronized 代替Segment去掉了HashEntry结构当前的 table【(n - 1) & hash】 == null 时,采用CAS操作当产生hash冲突时,采用synchronized关键字内部结构和HashMap相同,仍然使用: 数组 + 链表 + 红黑树默认sizeCtl = 16,初始
2020-08-24 00:11:05 1231 2
原创 ConcurrentHashMap1.7源码解读
写在前面的话有所坚持才会有所得,相信行动的力量。继承关系继承AbstractMap,实现ConcurrentMap和Serializable接口。具备map的基本属性,可序列化。ConcurrentMap接口,是一个能够支持并发访问的java.util.map集合,在map的基础上提供了4个接口 //插入元素 V putIfAbsent(K key, V value); //移除元素 boolean remove(Object key, Object value)
2020-08-17 00:33:36 326
原创 HashTable的源码和实践
继承关系Hashtable继承于Dictionary类,实现了Map接口。Map是"key-value键值对"接口,Dictionary是声明了操作"键值对"函数接口的抽象类。同时也可以被克隆和序列化。底层结构HashTable类中,保存实际数据的,依然是Entry对象。其数据结构与HashMap是相同的。也是数组加链表构造方法和初始化一些基本属性也与hashmap类似基本属性 private transient Entry<?,?>[] table; /**
2020-08-13 00:11:39 162
原创 面试题集锦-有无到有(2020版完结)
mybatis一对多和多对一配置一对多使用:collection多对一使用:assocation 标签分布式事物的实现方式引入协调者(Cooradinator)和参与者(Participant)。协调者负责调度参与者的行为,并最终决定这些参与者是否要把事务进行提交。1.XA事物(2pc)提交,两阶段提交第一阶段确定是否可以提交事务(提交事务请求),同时将对应的数据写入uodo日志中。返回一个状态值第二阶段根据协调者返回的状态值,进行对应的事物提交或者事物回滚。问题同步阻塞,单点故障等2
2020-08-03 00:55:58 1200
原创 HashSet原理和常用方法
写在前面的话学习还得继续,总是菜也不是个办法。继承关系从继承关系可以看出,HashSet可以被克隆,可以序列化,具备set的特性。底层结构由构造方法可以看出底层是HashMap,也就是Hash表。 private transient HashMap<E,Object> map; // Dummy value to associate with an Object in the backing Map private static final Object P
2020-07-29 01:25:21 468
原创 HashMap源码初尝及应用
思维导图思维导图是个好东西,哈哈继承关系public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {可以看出具有map的通性,也能够被克隆底层结构hashMap的hash算法JDK1.7中static int hash(int h) { // This function ensures that has
2020-07-27 01:20:53 225
原创 集合-Vector 的常用方法源码及使用场景
Vector继承关系public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable从继承关系可以看出Vector继承于AbstractList,实现了List、RandomAccess、Cloneable、 Serializable等接口。1.Vector 继承了AbstractLi
2020-07-23 16:45:14 839 2
原创 集合-ArrayList和LinkedList常见源码及异同
ArrayList继承关系public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable内部结构和初始化底层是可变数组 /** * Default initial capacity. * 初始化容量,这个没发现在初始化的时候使用,在扩容的时候有使用
2020-07-22 21:04:10 115
原创 MySQL-索引全方位解释
索引是什么?简单理解就是去看一本书的‘索引’部分,如果想找到一本书的特定部分,一般会先看书的‘索引’,然后找到对应的页码。‘索引’可以理解为‘目录’。在MYSQL中存储引擎用类似的方法使用索引,先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行。索引有什么用?加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID。索引怎么用?在查询时where条件为有索引的字段的情况下以及符合使用规则的时候就会使用索引。索引的分类(按照类型)B-Tree索引特点B-Tree上的
2020-07-15 00:15:59 162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人