Spring容器创建总结

=总结=
1)、 spring容器在启动的时候,会保存注册进来的所有的bean信息
1) xml注册bean
2) 解释注册bean @service @component @Import @Condition @bean @ImportSelector @ImportBeanDefinationRegister factoryBean<?>接口
2)、 spring容器会合适的时机创建这些bean
1)、用到这个bean的时候;利用getBean创建bean;创建好以后保存在容器中;
2)、统一创建剩下所有的bean的时候,finishBeanFactoryInitialization()
3)、 后置处理器
1)、 每一个bean创建完成都会使用各种后置处理器 来增强bean的功能
ConfigurationClassPostProcessor @import
AutowiredAnnotationBeanPostProcessor:处理自动注入
AnnotationAwareAspectAutoProxyCreator:来做AOP功能;
BeanValidationPostProcessor 数据校验
InitDestroyAnnotationBeanPostProcessor @PostConstruct的执行 为bean赋值后执行 populateBean(beanName, mbd, instanceWrapper) -> initializeBean(beanName, exposedObject, mbd)
4)、 事件驱动模型
1)、 ApplicationEventMulticaster 事件派发器(事件多播器)
原理: 1.容器创建东西会调用refresh方法 initApplicationEventMulticaster();初始化事件开发器 如没有则创建SimpleApplicationEventMulticaster
2.registerListeners(); 获取到容器中所有的listener getApplicationEventMulticaster().addApplicationListener(listener);
2)、 ApplicationListener 事件监听器
原理(容器刷新完成会发布ContextRefreshedEvent事件):
1.finishRefresh();方法中
2.publishEvent(new ContextRefreshedEvent(this)); 发布事件
3.获取到派发器getApplicationEventMulticaster().multicastEvent(applicationEvent, eventType)派发事件
4.for (ApplicationListener<?> listener : getApplicationListeners(event, type)) {循环(如果有executor支持异步派发事件)
5.拿到listener调用 onApplicationEvent()
eg: 在容器发布事件的时候获取所有的事件监听器执行onApplicationEvent()方法
EventListener注解->解析类EventListenerMethodProcessor实现了SmartInitializingSingleton接口->在finishBeanFactoryInitialization创建完bean后执行
BeanDefinitionRegistry是bean定义信息的保存中心
5).beanPostProcessor执行顺序
1.BeanDefinitionRegistryPostProcessor
2.BeanFactoryPostProcessor
3.InstantiationAwareBeanPostProcessors .postProcessBeforeInstantiation(AOP的AspectJAwareAdvisorAutoProxyCreator 创建代理对象)
4.InstantiationAwareBeanPostProcessors .postProcessAfterInitialization (Before执行成功有返回则执行后创建成功)
5.bean实例化
5.MergedBeanDefinitionPostProcessor .postProcessMergedBeanDefinition();修改bean实例属性 (InitDestroyAnnotationBeanPostProcessor 即 @PostConstruct注解)
6.SmartInstantiationAwareBeanPostProcessor.getEarlyBeanReference()
7.bean赋值
8.执行aware接口的方法(如果这个bean是BeanNameAware, BeanClassLoaderAware, BeanFactoryAware)
9.BeanPostProcessor.postProcessBeforeInitialization()
10.执行实现了InitializingBean初始化方法 和 正常的初始化方法
11.BeanPostProcessor.postProcessAfterInitialization()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值