zoukankan      html  css  js  c++  java
  • SpringIOC源码学习总结

    入口方法:AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(MyConfig.class);
    初始化容器后,关注refresh()方法,该方法是synchronized修饰,所以之后都是安全的。 之后关注registerBeanPostProcessors();finishBeanFactoryInitialization(beanFactory);,前者实例化beanPostProcessors,后者实例化非lazy的singletonBan.

    finishBeanFactoryInitialization(beanFactory)

    重点关注beanFactory.getBean();
    ->createBean();->doCreateBean的时候会依次执行createBeanInstance();populateBean();initializeBean,分别是创建实例注入属性执行初始化方法

    initializeBean()会先响应目标bean实现的aware接口->invokeAwareMethods.
    接着applyBeanPostProcessorsBeforeInitialization以及invokeInitMethods(该方法包含initializeBean的afterPropertiesSet调用以及bean指定的initMethod方法)
    然后applyBeanPostProcessorsAfterInitialization(包含得到代理对象等)
    之后再设置disposable方法。
    最后通过addSingleton(beanName, singletonObject);将其加入缓存。

    看图比较直接:
    在这里插入图片描述
    ps: Spring 在实现其bean生命周期的同时,还实现了JSR_250定义的@PostConstruct、@PreDestory、@Resource, 其中 @PostConstruct执行实际是在afterPropertiesSet与initMehotd之前。@PreDestory 在 DisposableBean的destroy之前。

  • 相关阅读:
    查询比分程序
    本周个人总结
    本周工作量及进度统计
    排球计分软件规格说明书
    我与计算机
    jenkins持续集成:定时构建语法
    kafka性能测试
    kafka简介
    kafka分区----分区如何分配到broker----生产者分区策略----消费者消费策略
    shell注释、变量、字符串、数组
  • 原文地址:https://www.cnblogs.com/thewindkee/p/12873162.html
Copyright © 2011-2022 走看看