spring源码

生命周期:在后台线程处理

AbstractApplicationContext reflesh方法卡点:来dubug主流程

tomcat 下Lifecycle类包含tomcat生命周期变迁路示

不去996的,要空余时间学习,不要浪费时间在无用的事上

可实现可不实现,是勾子函数

java 虚拟机规范

commons-digester

ApplicationContext extend HierarchicalBeanFactory

ConfigurableApplicationContext extend ApplicationContext

AbstractApplicationContext extends DefaultResourceLoader impl ConfigurableApplicationContext

基础
NIO 集合 网络编程

三级缓存
DefaultSingletonBeanRegistry

DefaultBeanDefinitionDocumentReader 面向继承设计的,是模板方法

preProcessXml(Element)
postProcessXml(Element)

解析xml时,先处理 profile

bean增强阶段

1,编译 lombok
2,加载
3,运行时

工厂如果没有原料和存储,怎么创建对象

BeanPostProcessor
BeanFactoryPostProccessor

单例对象创建过程

(1)createBeanInstance:实例化,其实也就是调用对象的构造方法实例化对象
(2)populateBean:填充属性,这一步主要是多bean的依赖属性进行填充
(3)initializeBean:调用spring xml中的init 方法。

DefaultSingletonBeanRegistry中三级缓存

1
2
3
4
5
6
7
8
9
// 第一层: 初始化完备的单例bean
/** Cache of singleton objects: bean name to bean instance. */
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);
// 第二层: 提前暴光的单例对象的Cache
/** Cache of early singleton objects: bean name to bean instance. */
private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);
// 第三层: ObjectFactory工厂bean缓存, 存储实例话后的bean Factory
/** Cache of singleton factories: bean name to ObjectFactory. */
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);

AbstractAutowireCapableBeanFactory
.createBean 创建bean的核心方法

BeanWrapper

BeanDefined

Enviroment
Resouce