Spring IOC 加载流程图
2020-12-03 10:04:04 4 举报
Spring IoC 加载流程
作者其他创作
大纲/内容
Car.lass
BeanPostProcess
yes
被注解标注的方法
no
dependsOn
实例化完但没有自动装配就是纯净态
requiresDestruction
setEmbeddedValueResolver
提供扩展点操作bean定义
@Lazy@Scope
依赖
ClassLoader
隔壁老王在碧桂园看房
doCreateBean()
postProcessBeforeInitialization
DefaultSIngletonBeanRegistry
bean初始化过程的几种形态
坦克图纸
BeanClassLoaderAware
InstantionAwareBeanPostProcessor
BeanDefinitionRegistryPostProcessor
getBean(\"user\")
A依赖B
postProcessAfterInitialization
MessageSoutceAware
addSingleton()
BeanDefitionScaner
1000 100
SUV图纸
BeanFactory 和 ApplicationContext 的区别:工厂和4S店的区别(或者说装修公司和设计师的区别);BeanFactory 是Bean的工厂,Spring的顶层核心接口,没有BeanFactory就没有Bean的存在,工厂只负责按照要求生产Bean,Bean的定义信息,要生产成什么样由下家(ApplicationContext)说了算。ApplicationContext 面向的是用户,所以需要更好的服务用户,不仅要提供Bean和调用工厂去生产Bean还要提供一系列人性化的服务(如国际化、加载Bean定义、监控器等等...),怎么生成Bean的事交给工厂去做。但是 ApplicationContext 也依赖工厂,没有工厂它没有办法提供Bean,没有办法更好的服务用户,所以它需要继承工厂。
属性赋值 Populate
图纸BeanDefinition
BeanNameAware
修改
SUV
BeanPostProcessors
注入属性PropertyValues@AutoWired在这里进行DI
成熟态
扩展点——初始化生命周期回调方法
put
二级缓存早期暴露Bean循环依赖才体现纯净态的作用
MessageSourceAware
AOP
特殊车辆
determineCandidateConstructors
no添加到IncreationcreateBean()
IOC主线
invoke
BeanFactory
初始化initMethod destroy
bean的后置处理器9处调用
Aware
postProcessMergedBeanDefinition
设计师BeanDefinitionRegistry
定义态BeanDefinition
beanDefinition
postProcessPropertyValues
InstantiationAwareBeanPostProcessor
Spring IOC 加载流程图
如何符合生产标准
概念态
反射
可直接返回bean停止创建AOP:解析切面
BeandefinitionMap
EnvironmentAware
实例化Instantiation
addSingletonFactory
init
DisposableBean
MergedBeanDefinitionPostProcessor
destroy-method
普通车辆
setApplicationEventPublisher
postProcessBeforInstantiation
postProcessAfterInstantiation
SmartInstantiationAwareBeanPostProcessor
标记正在创建中掘金循环依赖
实例化
setBeanFactory
@PreDestroy
afterPropertiesSet
指定实例化的构造函数
实例化反射
beanDefinitionMap封装Bean的生产指标
invokeBeanFactoryPostProcessors
setBeanClassLoader
Bean
singletonFactories
Tank.lass
事件
getBean
将概念态bean扫描为定义态
跑车
init-method
DestructionAwareBeanPostProcessor
lazyInit
earlySingletonObjects
isInCreation
可获取bean也可生产bean
propertyValues
初始化的声明周期接口调用
setMessageSource
B依赖A
轿车图纸
setApplicationContext
工厂
循环依赖解决方案
CGLIB
JavaConfig
scope
BeanFactory 和 FactoryBean 的区别:虽然名字很像容易混淆,但是完全2个东西。BeanFactory 是Bean的工厂,Spring的顶层核心接口,没有BeanFactory就没有Bean的存在,重要程度可想而知。FactoryBean 也是一个接口,被它修饰的Bean将成为一个特殊的Bean,原本的Bean将被隐藏,而是由FactoryBean的getObject返回最终Bean。我们可以把FactoryBean当中是个改装车行,它可以改装你原本的Bean。
终止赋值
衣柜店XmlApplicationContext
ApplicationEventPublisherAware
destroy
同行看房的有1000人,真正有意向可能就100人,其中包括隔壁老王
碧桂园的销售很厉害,能识别(扫描)出哪些是真正的刚需,开始做接待工作
橱柜店@ApplicationContext
setWnvironment
通过配置指定的方法
InitializingBean
BeanDefitionReader
工厂BeanFactory
款式颜色
衣柜@Bean
Beandefinitionbean定义
ResourceLoaderAware
invokeAwareMethods
三级缓存 三个Map
注解配置
接待扫描BeanDefinitionScaner@Component
ApplicationContextAwareProcessorpostProcessBeforeInitialization
BeanDefitionRegistry
初始化 Initialization
class BeanB { @AutoWired BeanA a; }
3⃣️
循环依赖getBean(suv)
singletonObjects是否创建完成
JVM类加载到内存
BeanFactoryAware
各种车子的生成方法(BeanDefinitionMap)
隔壁老王新买的房子搞装修
2⃣️
创建完成
beanClass
BeanFactoryPostProcessor
InstantiationAwaewBeanPostProcessor
AbstractBeanFactory.getBean()生产
1⃣️
setResourceLoader
循环依赖支线
类XML@注解
map.get()
解决循环引用AOP
autowireMode
二、三级缓存
皮卡图纸
关闭容器 close()
@AutoWrired @Value预解析InjectionMetadata
class BeanA { @AutoWired BeanB b; }
singletonObjects最终在应用中使用的bean
初始化后AOP:创建代理
注册
BeanPostProcessor
隔壁老王(class)@Component
销售BeanDefinitionReader楼盘配置类.xml
AbstractAutowriteCapableBeanFactory
@PostConstruct
其中一个
纯净态
初始化前调用@PostContruct
橱柜@Bean
XML配置
属性填充@AutoWired @Value
ApplicationContextAware
ClassXmlApplicationContext
......
AnnotationConfigApplicationContext
classname
EmbeddedValueResolverAware
填充属性
@Bean<bean/>@Lazy...
initMethodName
0 条评论
下一页