Synchronized是Java中解决并发问题的一种最常用的方法,也是使用相对容易的一种方法。本文主要介绍其实现原理,如果对使用不太清楚的,可以参考java多线程系列02sychronized关键字。
spring源码解析之 29实例化bean总结
在Spring bean解析篇深入分析了一个配置文件经历了哪些过程转变成了BeanDefinition,但是这个BeanDefinition并不是我们真正想要的想要的bean,因为它还仅仅只是承载了我们需要的目标bean的信息,从BeanDefinition 到我们需要的目标还需要一个漫长的 bean 的初始化阶段,在Spring bean 实例化阶段已经详细分析了初始化 bean 的过程,所以这里做一个概括性的总结。
bean的初始化节点由第一次调用getBean()(显式或者隐式)开启,所以我们从这个方法开始。
spring源码解析之 28深入分析InitializingBean 接口和 init-method
spring源码解析之 27深入分析BeanPostProcessor接口
Spring作为优秀的开源框架,它为我们提供了丰富的可扩展点,除了前面提到的Aware接口,还包括其他部分,其中一个很重要的就是BeanPostProcessor。这篇文章主要介绍BeanPostProcessor的使用以及其实现原理。我们先看BeanPostProcessor的定位:
BeanPostProcessor的作用:在Bean完成实例化后,如果我们需要对其进行一些配置、增加一些自己的处理逻辑,那么请使用BeanPostProcessor。
spring源码解析之 26深入分析Aware接口
我们经过前面的解析,已经知道了如何创建一个bean。但是在在上一篇博客bean的初始化中,说道bean的初始化initializeBean会做以下三件事,分别是:
- 激活Aware方法
- 后置处理器的应用
- 激活自定义的 init 方法
虽然我们分析了这部分的源码,但是没有仔细分析,所以接下来三篇文章,会分别对这三个进行仔细分析。单独拿出来说的原因,是他们都是spring提供给我们可以使用的扩展机制。这里先来分析Aware接口
spring源码解析之 25bean的初始化
spring源码解析之 24循环依赖处理
这篇分析 doCreateBean() 第三个过程:循环依赖处理。其实循环依赖并不仅仅只是在 doCreateBean() 中处理,其实在整个加载 bean 的过程中都有涉及,所以下篇内容并不仅仅只局限于 doCreateBean(),而是从整个 Bean 的加载过程进行分析。
spring源码解析之 23属性填充
doCreateBean() 主要用于完成 bean 的创建和初始化工作,我们可以将其分为四个过程:
createBeanInstance()实例化beanpopulateBean()属性填充- 循环依赖的处理
initializeBean()初始化bean
第一个过程实例化 bean 已经在前面两篇博客分析完毕了,这篇博客开始分析属性填充,也就是 populateBean(),该函数的作用是将BeanDefinition中的属性值赋值给BeanWrapper实例对象(对于BeanWrapper 我们后续专门写文分析)。
spring源码解析之 22构造函数实例化
spring源码解析之 21 实例化bean
这篇我们关注创建bean过程中的第一个步骤:实例化bean,对应的方法为:createBeanInstance(),如下: