自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 SpringBoot的@Value和@AutoWired自动装配注解源码

然后这两个方法postProcessMergedBeanDefinition和postProcessProperties都是在Spring容器去拿Bean实例的方法doCreateBean方法中遍历接口实现类调用接口方法调用的,这两个方法都是接口的实现方法,理解到这,懂了,这就是Spring留出的一个很牛逼的扩展点。之后调用该类的postProcessProperties方法为找到的这些需要自动装配的类进行属性值注入。在寻找当前Bean需要自动装配的属性的时候,怎么确定该属性需要自动装配?

2023-12-21 22:20:24 906

原创 SpringBoot@Resource注入源码

父类是InitDestroyAnnotationBeanPostProcessor,其实现该接口方法的作用正好是获取当前Bean的。在本类调用接口实现方法postProcessMergedBeanDefinition时也调用了父类的该接口实现方法。参考笔记[[初始化方法注解@PostConstruct和销毁前置方法注解@PreDestroy的实现源码]]可看到里面有@Resource注解类型。没想到发现这个了,有意思。

2023-12-21 22:17:48 446

原创 SpringBoot初始化方法注解@PostConstruct和销毁前置方法注解@PreDestroy的实现源码

那到这已经明白了,SpringBoot就是这样不给Bean的BeanDefinition的initMethodName设置值,但仍保留这个属性(为了兼容Spring逻辑,Spring的原逻辑要用到这个属性值),但将其置空(null),导致Spring原逻辑拿不到该属性值,找不到要调用的初始化方法,实现置空了Spring原有的调用初始化方法的逻辑。在一个Bean类中,被@PostConstruct注解标注的方法会被解析为该Bean的初始化方法调用的前置方法,在其初始化方法调用前调用。

2023-12-21 22:15:29 1229

原创 Spring三级缓存源码分析

spring三级缓存解析,源码debug

2023-12-14 19:00:48 909 1

原创 JavaWeb中getResourceAsStream的用法

getResourceAsStream

2022-07-07 22:39:02 269

原创 Java中getResourceAsStream的用法

Java中的getResourceAsStream

2022-07-06 17:29:41 226

原创 java里JSON使用中TypeToken为什么要用匿名内部类创建的真正原因(泛型擦除)

java里Json中的TypeToken与泛型的密切联系

2022-07-05 23:49:09 1810 5

原创 static块和static属性在类加载时的顺序

static块和static属性在类加载时的顺序

2022-06-11 22:26:34 220

原创 JS中为window添加DOMContentLoaded事件监听的小思考

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> .new { height: 100px; width: 100px; margin: 100.

2022-04-27 09:29:45 988

原创 Java中集合边迭代(遍历)边删除注意事项

//边迭代边删除需可以用集合的迭代器,不能用foreach循环加上集合本身的remove方法//因为foreach本身也是实现的迭代器//新建迭代器时会自动新开一个迭代器专用线程且将原线程中集合的对象拷贝过去//迭代器每次迭代都会检查自己的线程中的元素数量与原线程中的元素数量是否相等(基于CAS机制)//若不相等则抛出异常,若在foreach调用集合本身的remove方法而不是迭代器的remove//则仅会删除原线程的相应元素,而迭代器这边的线程是侦查不到的,也就造成了两线程中//元素个数不一.

2022-01-22 15:05:00 583

原创 Volatile不能保证原子性的原因及CAS在此基础上的优化操作

如i++操作,分为三步1.读取i到temp(临时变量存储i的值,在寄存器中)2.temp=temp+13.i=temp修改完成通知其他线程当两个线程(设i初值为5)都执行完2将要执行3,若其中一个线程先执行完,会发给另外其他线程通知i已被修改过,若i加了volatile,此时未执行完的那个线程会重新读取i,但不会再重复1,2操作,结果仍是6,这是volatile无法保证原子性操作的根源(对volatile变量的修改即写操作是由多个原子操作复合的,则无法再保证原子性,但可见性即收到通知后重新读取

2022-01-20 18:46:27 294

原创 Java中static方法(子类能否继承,重写父类的static方法)

先上测试代码:测试数据来看:父类的静态方法可以被子类继承,但不能被"重写",这里的重写指我们一般默认的重写,是基于动态绑定来说的,按动态绑定来说向上转型之后在运行时调用方法时,若子类重写了该方法会调用子类的该方法。但对于静态方法来说,不存在动态绑定这一说法,其基于的是静态绑定静态方法属于静态绑定,在编译阶段已经确定函数名和地址,静态方法当然是可以被继承的,但是却不能被重写,为什么那? 因为重写的意思是重新定义父类的虚函数,但是虚函数是动态绑定的,而静态方法是静态绑定的,所以静态.

2022-01-11 19:26:31 6251

原创 Java中HashMap的hash方法原理是什么

HashMap的hash方法获取hash值的底层原理及思想

2022-01-10 13:38:39 630

原创 对2-3树的个人理解

(个人在学习2-3树时的一些深入思考,对比了AVL树,在想为何创造了2-3树,逻辑可能不请,个人笔记,还请谅解)首先2-3树有一个前提:对于2-3树结点的每次添加,永远不会添加到空位置上.个人对此前提的理解:2-3树的设计理念我认为是每个结点添加满三个值时再进行处理,因为一点满足该结点存满了3个值则可立即对这3个数进行比较,看谁是中间数,即哪个值应该放在中间位置,对这3个数排序找出该中间值将其输送到父节点,从而产生一个向该子树方向的竞争力量(或左,或中,或右)该竞争力量可对最终根节点值的确定

2021-12-14 16:47:15 363

原创 Java堆排序实现数组排序(详细注释)

堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序,下面先来看看什么是大根堆和小根堆:每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子结点的值,称之为小根堆。 数组化为完全二叉树的性质:下标为i(i从0开始)的节点左右孩子节点下标为2*i + 1 和 2*i + 2而最后一个非叶子节点(无左右子树)的节点的下标为数组长度length/2 - 1(因为完全二叉树的每...

2021-11-28 18:51:20 570

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除