-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patheg.txt
More file actions
84 lines (52 loc) · 2.71 KB
/
eg.txt
File metadata and controls
84 lines (52 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
1、创建 Bean 容器
可以理解为是一个 Map 集合 ,beanName : BeanDefinition
2、实现 Bean 的定义、注册、获取
在 Bean 工厂的实现中,包括了 Bean 的注册,注册 Bean 的定义信息
DefaultListableBeanFactory 具备了 Bean 注册和获取,继承了 BeanFactory,继承了模板类
3、基于 Cglib 实例化策略,有参无参构造
4、注入属性和依赖对象
BeanReference / PropertyValue
5、资源加载器解析文件注册对象
通过解析配置文件的方式,将 Bean 定义加载到容器中,解析 bean 节点
6、实现应用上下文
ApplicationContext
BeanFactoryPostProcessor:在BeanDefinition 加载完成 & Bean实例化之前,修改 BeanDefinition 的属性值
BeanPostProcessor:在Bean实例化之后,修改 Bean 属性信息
7、初始化和销毁方法
InitializingBean、init-method
DisposableBean、destroy-method
A继承B实现C时,C的接口方法由A继承的父类B实现
8、Aware感知容器对象
Aware
Bean 生命周期
1、XML 读取配置文件
2、将配置文件 Bean 封装成 BeanDefinition
3、BeanFactoryPostProcessor 修改 BeanDefinition
4、Bean 实例化
5、Aware 感知
6、BeanPostProcessor 前置处理
7、Bean 初始化方法(InitializingBean、init-method)
8、BeanPostProcessor 后置处理
9、使用 Bean
10、Bean 销毁方法(Disposable、destroy)
9、作用域以及 FactoryBean
FactoryBean 是特殊的 Bean,工厂 Bean,作用类似于 @Bean,但 FactoryBean 能实现更多复杂的功能,对对象增强。
10、容器事件和事件监听器
简单工厂BeanFactory、工厂方法FactoryBean、策略模式访问资源、观察者模式 事件监听
isAssignableFrom 是用来判断子类和父类的关系的
11、AOP
12、AOP
每个 BeanDefinition 都会过一遍 getBeanPostProcessors() 循环,只有满足条件的才会被创建代理对象(通过切点找到给定的接口或目标类)
13、扫描组件 component-scan
14、通过注解属性注入
15、给代理属性赋值
所谓的给代理属性数值操作是在 postProcessAfterInitialization 完成的
16、三级循环解决循环依赖
自身依赖、循环依赖、多组依赖
Spring 中把所有普通 Bean 初始化完成后,再处理代理对象的初始化。
singletonObjects、earlySingletonObjects、singletonFactories
成品对象、半成品对象(未填充属性)、工厂对象(可能是AOP代理对象)
实际上,A 依赖 B,B 依赖 A,也是使用三级缓存解决的,
如果是单例,将 beanName: AbstractAutowireCapableBeanFactory put 到 三级缓存中 singletonFactories
如果有循环依赖,从三级缓存中获取,工厂对象
提前暴露对象