结合生活案例看Spring-IOC容器加载流程
2021-06-23 18:11:20 2 举报
登录查看完整内容
用了这么多年,我们真的理解spring吗?进大厂spring源码是“最基础的”,而看spring源码第一件事便是先理解springIoc加载流程。一句话:spring源于生活。站在生活角度理解真的很深刻,希望能帮助到各位。个人有spring源码的整套源码图,超详细,都是我看源码一点一点画的,真的有点舍不得分享,哈哈。后续再说吧
作者其他创作
大纲/内容
@ComponentCar.class一些基本属性
扩展点---bean的后置处理器,9次调用
Map beanDefinitionMap
EnvironmentAware
注入属性PropertyValues@AutoWired在这里进行DI
InstantiationAwareBeanPostProcessor
BeanDefinitionbean定义汽车设计图纸
BeanNameAware
setApplicationEventPublisher
BeanDefinitionReader汽车销售
setApplicationContext
初始化前调用@PostContruct
BeanDefinitionScanner扫描我们的类
init
中止赋值
getBean()
bean
requiresDestruction()
postProcessAfterInitialization
javaConfigxml配置注解配置
汽车店AnnotationConfigApplicationContext
@PostContruct
调用一系列Aware
setResourceLoader
比如mybatis的@Mapper就是通过这个添加的动态代理(@Mapper修饰的为接口也能创建bean的原因)
InitializingBean
扩展点---初始化生命周期回调方法
BeanDefinitionRegistry汽车设计师
通过配置指定的方法
AnnotationConfigApplicationContextClassPathXmlApplicationContext
setEmbeddedValueResolver
BeanClassLoaderAware
被注解标注的方法
比如我们可以在这里把本来要创建的Car对象换成Bike类型,把汽车换成单车
postProcessBeforeInitialization()
事件
ApplicationContextAware
DisposableBean
setBeanName
setBeanClassLoader
postProcessAfterInitialization()
SmartInstantiationAwareBeanPostProcessor
postProcessPropertyValues()
注册
ServletContextAware
BeanFactoryPostProcessorbean工厂后置处理器
IOC容器
@AutoWired @Value预解析InjectionMetadata
EmbeddedValueResolverAware
BeanFactory的注释
指定实例化的构造函数
配置类
MessageSourceAware
destroy
添加图纸
初始化后AOP:创建代理
init-method
setMessageSource
BeanDefinitionRegistryPostProcessorbean定义注册器后置处理器
postProcessBeforeInstantiation()
beanDefinitionMap
@PreDestroy
doCreateBean()
setBeanFactory
BeanPostProcessors
DestructionAwareBeanPostProcessor
getBean(\"car\")
BeanFactory汽车工厂
可直接返回bean,停止创建AOP解析切面
读取
初始化(比如调用initMethod、destroy)
修改图纸
postProcessAfterInstantiation()
解决循环引用AOP
afterPropertiesSet
setServletContext
MergedBeanDefinitionPostProcessor
关闭容器close()
xml
BeanPostProcessor
ApplicationEventPublisherAware
postProcessMergedBeanDefinition
determineCandidateConstructors()
destroy-method
BeanFactoryAware
ResourceLoaderAware
扫描
填充属性(@Autowire修饰的属性等)
ApplicationContextAwareProcessor postProcessBeforeInitialization
invokeAwareMethods()
当我们拿对象的时候实际上就是从map中拿
getEarlyBeanReference()
setEnvironment
实例化(反射、工厂)
0 条评论
回复 删除
下一页