0
点赞
收藏
分享

微信扫一扫

获取单例

Alex富贵 2023-09-21 阅读 56

从缓存获取单例的过程,如果缓存中不存在已经加载的单例bean,就需要从头开始bean的加载过程了,而Spring中使用getSingleton的重载方法实现bean的加载过程。

public Object getSingleton(String beanName, ObjectFactory singletonFactory)
// 全局变量需要同步
// 首先检查对应的bean是否已经加载过,因为singleton模式其实就是复用已创建的bean,所以这一步是必须的
// 如果为空才可以进行singleton的bean的初始化
// 初始化bean
// 加入缓存
}

上述代码中其实是使用回调方法,使得程序可以在单例创建的前后做一些准备及处理操作,而真正的获取单例bena方法其实并不是在此方法中实现的,其实现逻辑是在ObjectFactory类型的实例singletonFactory中实现的,而这些准备及处理操作包括如下内容:

1.检查缓存是否已经加载过了。

2.如没有加载,则记录beanName的正在加载状态。

3.加载单例前记录状态。

ObjectFactory的核心部分其实只是调用了createBean的方法,所以还需要到createBean方法中寻找真理。

getSingleton(beanName,new ObjectFactory< Object>()
// return createBean(beanName,mbd,args)

举报

相关推荐

0 条评论