Spring 源码学习 16:单例 Bean 创建

2021-01-21
阅读 13 分钟
1.7k
在 finishBeanFactoryInitialization 中介绍了创建 Bean 的流程大概流程,这里进入单例 Bean 的创建过程。

Spring 源码学习 15:finishBeanFactoryInitialization(重点)

2021-01-19
阅读 16 分钟
2k
前言可以说前面的都是准备工作,而接下来开始的才是重点,在这一步会完成 BeanFactory 的初始化,同时实例化单例 Bean。具体怎么操作的,那就一起阅读源码吧!不过在阅读源码之前,还是需要了解一些知识的。什么是 FactoryBean ?FactoryBean 是如何使用的 ?Bean 是如何初始化的?常说的循环依赖是怎么解决的?什么是 F...

Spring 源码学习 14:initApplicationEventMulticaster、onRefresh

2021-01-13
阅读 5 分钟
1.8k
上一篇介绍了国际化的使用以及初始化消息源的源码,接下来接着往下阅读,将进入 initApplicationEventMulticaster 、onRefresh 和 registerListeners 的相关操作逻辑。

Spring 源码学习 13:initMessageSource

2021-01-04
阅读 4 分钟
1.8k
在阅读完 registerBeanPostProcessors 源码之后, 下一步就进入到 initMessageSource,这一步主要作用是初始化国际化文件。

Spring 源码学习 12:registerBeanPostProcessors

2021-01-02
阅读 7 分钟
2.4k
前面通过 invokeBeanFactoryPostProcessors 这一步了解到了什么是 BeanFactoryPostProcessor ,以及 BeanFactoryPostProcessor 的使用及作用,并通过 invokeBeanFactoryPostProcessors 这一步源码,对 BeanFactoryPostProcessor 的加载流程有了进一步了解。

Spring 源码学习 11:invokeBeanFactoryPostProcessors

2020-12-28
阅读 14 分钟
1.6k
知道了上面两个问题的答案,对 BeanFactoryPostProcessor 有了了解之后,然后再深入源码,继续阅读 invokeBeanFactoryPostProcessors 这个方法。

Spring 源码学习 10:prepareBeanFactory 和 postProcessBeanFactory

2020-12-27
阅读 4 分钟
2.8k
根据 refresh 流程,当 obtainFreshBeanFactory 执行结束后,下一步会执行 prepareBeanFactory ,顾名思义,这个方法主要是准备 BeanFactory,下面一起看一看这部分逻辑。

Spring 源码学习 08:register 注册配置类

2020-12-23
阅读 2 分钟
1.8k
前言看完无参构造的源码及流程之后,后面将会执行 register 方法。register 方法,入参是我们的配置类 JavaConfig.class ,下面跟着源码继续往下走!源码分析this.reader.register(componentClasses);这里执行的是 reader 的方法,入参就是传入的 JavaConfig.class。reader 在之前初始化,就是注册一些 PostProcessor。...

IDEA 文档插件 DocView 版本更新:修改 UI 并支持 IDEA 2020.3 !

2020-12-16
阅读 1 分钟
1.6k
前言近期工作开始忙起来,各种忙,连阅读 Spring 源码都暂停了,Doc View 也暂时搁置计划,虽然想有很多功能,但是总是要慢慢来的。也有几个小伙伴在 github 提了 Issues:希望支持 IDEA 2020.3也有 bug 反馈说参数列表显示不全当然就只有两个 Issues …… 也是没几个人用的原因。下面看一下这次更新的内容还有一些计划及...

Spring 源码学习 07:ClassPathBeanDefinitionScanner

2020-12-15
阅读 2 分钟
1.1k
AnnotationConfigApplicationContext 构造函数除了初始化一个 reader ,还有一个 scanner,下面来一起看看 ClassPathBeanDefinitionScanner 都有什么逻辑。

Spring 源码学习 06:AnnotatedBeanDefinitionReader

2020-12-10
阅读 2 分钟
1.6k
前言BeanDefinition 的概念也了解了,也知道一个 Bean 在 Spring 中定义的信息有哪些之后,继续言归正传。源码分析在初始化时会先生成一个 reader ,进入方法,其实是走的下面的逻辑:其中 getOrCreateEnvironment(registry) 会返回一个 Environment 用来表示当前的运行环境之类的。ConditionEvaluator 是用来完成对 @Co...

Spring 源码学习 05:BeanDefinition 概念及其实现

2020-12-08
阅读 3 分钟
1.4k
BeanDefinition:顾名思义,就是 Bean 的定义,是用来描述一个 Bean 都有什么信息。前面说在初始化 DefaultListableBeanFactory 时,会初始化一个 Map<String, BeanDefinition>,这个 Map 的功能暂且不说,(PS:查资料说的是存储 bean),所以今天就结合官方文档以及源码,一起了解一下 BeanDefinition!

Spring 源码学习 04:初始化容器与 DefaultListableBeanFactory

2020-12-03
阅读 3 分钟
1.6k
在前一篇文章:创建 IoC 容器的几种方式中,介绍了四种方式,这里以 AnnotationConfigApplicationContext 为例,跟进代码,看看 IoC 的启动流程。

brew 异常 Calling brew list to only list formulae is deprecated!

2020-12-02
阅读 1 分钟
2.7k
问题最近终端总是弹出这么一句话,咱也不懂怎么解决。Google baidu 也查不到问题。小伙伴帮忙看一下。每次新打开终端都会有这个 Warning 。 {代码...} 最后被逼无奈,在 V 站 发帖求助小伙伴, 结果还真找到了答案解决方式最后找到问题所在,是因为按照网上的教程安装的 Coreutils~/.zshrc 里改一下即可。补充写到这里,...

Spring 源码学习 03:创建 IoC 容器的几种方式

2020-12-02
阅读 2 分钟
1k
前言在上一篇文章末尾画了一幅简图,现在从简图这入手,先来看看如何创建容器!创建容器在搭建 Spring 源码阅读环境 时,最后举了一个例子,其实就是创建容器,并从容器中获取 Bean ,来测试环境是否 OK。根据元数据的不同,创建容器的方式也不同,下面参考官方文档,简单介绍下创建容器的几种方式:Java 配置获取元数据...

Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念

2020-12-01
阅读 2 分钟
1.3k
前言在前一篇文章中介绍了如何构建源码阅读环境,既然构建好了源码环境,本地也可以正常运行,那就开始阅读源码吧!在阅读源码时,会参考官方文档,很多概念在官网都可以得到答案,有兴趣的小伙伴们可以继续阅读,当做复习,写的不足之处,希望多多指导。IoC 和 DIIoCIoC(Inversion of Control),即控制反转。之前是在...

Spring 源码阅读环境的搭建

2020-11-27
阅读 3 分钟
3.8k
前言本文记录了 Spring 源码环境的搭建方式,以及踩过的那些坑!​当前版本:5.3.2-SNAPSHOT。环境准备GitJDKmaster 分支需要 JDK 115.2.x 分支, JDK8 即可Gradle 6.5.1IDEA 最新 (2020.2.3)Spring 源码仓库地址:[链接]下载源码clone 源码 {代码...} 使用 IDEA 打开等待 IDEA 加载完成即可。注: 也可以指定 clone 的...

DocView 现在支持自定义 Markdown 模版了!

2020-11-24
阅读 1 分钟
1.6k
前言有小伙伴反馈说希望可以自定义 Markdown 模版,这样就可以导出自己想要的样式了!这个功能可以有,毕竟大家不可能都生成一模一样的文档。现在来一起看看如何实现自定义模版吧!

Dubbo 接口,导出 Markdown ,这些功能 DocView 现在都有了!

2020-11-19
阅读 2 分钟
1.2k
前言自从 DocView 发布了简陋的第一版之后,就不断地有小伙伴提建议意见等等,希望扩展各种功能。这不,时隔两周,DocView 又发布了新版本,本次的更新主要涉及到支持 Dubbo,以及支持导出单个文档为 Markdown 文件。来一起看看新功能吧!

线程池 ThreadPoolExecutor 原理及源码笔记

2020-11-16
阅读 8 分钟
1.1k
前言前面在学习 JUC 源码时,很多代码举例中都使用了线程池 ThreadPoolExecutor,并且在工作中也经常用到线程池,所以现在就一步一步看看,线程池的源码,了解其背后的核心原理。

Spring 自调用事务失效,你是怎么解决的?

2020-11-09
阅读 4 分钟
7.1k
前言相信大家都遇到一种事务失效场景,那就是 Spring 自调用,就是在 Service 方法内,调用另一个加 @Transactional 注解的方法,发现事务失效,这时候你是怎么解决的呢?

写时复制集合 —— CopyOnWriteArrayList

2020-11-08
阅读 5 分钟
2k
前言JUC 下面还有一个系列的类,都是 CopyOnWriteXXX ,意思是写时复制,这个究竟是怎么回事?那就以 CopyOnWriteArrayList 为切入点,一起了解写时复制是怎么回事?

非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue

2020-11-08
阅读 5 分钟
3.8k
前言JUC 下面的相关源码继续往下阅读,这就看到了非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue,来一起看看吧。

APP 莫名崩溃,开始以为是 Header 中 name 大小写的锅,最后发现原来是容器的错!

2020-11-08
阅读 10 分钟
5.2k
前言部署测试,部署预发布,一切测试就绪,上生产。发布生产闪退What???马上回滚开始排查后端一模一样的代码,不是 APP 端的问题吧。可 APP 端没有发版啊。…… 一番排查原来是 APP 端打包,测试和预发布包 Header 传的都是 Authorization ,生产传的是 authorization 。就是大小写问题,那赶紧改。

几行代码轻松实现跨系统传递 traceId,再也不用担心对不上日志了!

2020-11-08
阅读 5 分钟
2.4k
前言新项目查日志太麻烦,多台机器之间查来查去,还不知道是不是同一个请求的。打印日志时使用 MDC 在日志上添加一个 traceId,那这个 traceId 如何跨系统传递呢?

老大问我:“建表为啥还设置个自增 id ?用流水号当主键不正好么?”

2020-11-08
阅读 3 分钟
1.4k
又要开始新项目了,一顿操作猛如虎,梳理流程加画图。这不,开始对流程及表结构了。我:吧啦吧啦吧啦 ……老大:这个建表为啥还设置个自增 id ?直接用流水号(用户号/产品号)当主键不就行了?我:这个是 DBA 规定的,创建表 id、create_time、update_time 这三个字段都要有。《Java 开发规范》也是这么规定的。小伙伴:...

基于链表的有界阻塞队列 —— LinkedBlockingQueue

2020-11-08
阅读 6 分钟
2.6k
前言上一节看了基于数据的有界阻塞队列 ArrayBlockingQueue 的源码,通过阅读源码了解到在 ArrayBlockingQueue 中入队列和出队列操作都是用了 ReentrantLock 来保证线程安全。下面咱们看另一种有界阻塞队列:LinkedBlockingQueue。

AQS 都看完了,Condition 原理可不能少!

2020-11-08
阅读 10 分钟
2.9k
前言在介绍 AQS 时,其中有一个内部类叫做 ConditionObject,当时并没有进行介绍,并且在后续阅读源码时,会发现很多地方用到了 Condition ,这时就会很诧异,这个 Condition 到底有什么作用?那今天就通过阅读 Condition 源码,从而弄清楚 Condition 到底是做什么的?当然阅读这篇文章的时候希望你已经阅读了 AQS、Reen...

使用递增计数器的线程同步工具 —— 信号量,它的原理是什么样子的?

2020-11-08
阅读 6 分钟
977
前言在 JUC 中线程同步器除了 CountDownLatch 和 CycleBarrier ,还有一个叫做 Semaphore (信号量),同样是基于 AQS 实现的。下面来看看信号量的内部原理。

你有没有想过为什么交易和退款要拆开不同的表

2020-11-08
阅读 2 分钟
3.3k
前言近期做新项目,在设计表结构的时候,突然想起来之前面试的时候遇到的一个问题,那时候也是初出茅庐,对很多东西一知半解(当然现在也是),当时那个小哥哥问我为什么交易和退款要拆成两个表?是基于什么考虑?有什么好处和优点么?