浅析Spring IoC源码(十一)Spring refresh()方法解析后记2
  fztgkkRjHIsV 2023年11月09日 30 0


接着上次那个后记接着说,我们已经知道了分析了refresh()这个方法中的关于BeanFactoryPostProcessor的执行的代码分析:


浅析Spring IoC源码(十一)Spring refresh()方法解析后记2_java

因为任何实现了BeanFactoryPostProcessor接口的bean首先要做的事就是先把自己实例化好,所以我们花了很大篇幅讲了getBean这个spring的核心方法~

我们看的都是invokeBeanFactoryPostProcessors这个方法682行的代码

浅析Spring IoC源码(十一)Spring refresh()方法解析后记2_java_02

执行完682行代码后,控制台的打印日记如下:

浅析Spring IoC源码(十一)Spring refresh()方法解析后记2_实例化_03

我们接着分析第684行代码

浅析Spring IoC源码(十一)Spring refresh()方法解析后记2_java_04

进入invokeBeanFactoryPostProcessors这个方法

浅析Spring IoC源码(十一)Spring refresh()方法解析后记2_spring_05

好了,我们BeanFactoryPostProcessor的postProcessBeanFactory的方法终于实现了:

浅析Spring IoC源码(十一)Spring refresh()方法解析后记2_java_06


到此为止,关于BeanFactoryPostProcessor的实例化全部结束了,我们开始继续跟踪~

现在还有一个问题就是SpringSimpleMultiBean.Java这个bean实现了BeanPostProcessor接口,但是并没有执行该接口的方法,因为此刻还没有注册BeanPostProcessor

接着看refresh()这个方法


浅析Spring IoC源码(十一)Spring refresh()方法解析后记2_实例化_07


464行写出先要对实现BeanPostProcessor接口的bean进行注册,然后在479行实例化其他普通的被spring管理的没有实现BeanFactoryPostProcessor接口的bean时,再运行BeanPostProcessor的方法

其实上个章节我们已经截图说明BeanPostProcessor的具体实现什么时候执行了

浅析Spring IoC源码(十一)Spring refresh()方法解析后记2_实例化_08

对的,也就是说在init-method方法和InitializingBean接口之前之前执行,很好理解,因为上次我们讲过BeanPostProcessor也是可以对bean进行临时修改的,修改之后的bean才是用户自定义的bean也就是我们想要的bean,然后再运行init-method或者afterPropertiesSet方法,才是合理~

当spring容器完全初始化好我们定义的spring-init.xml中的文件时,控制台打印的就是:

浅析Spring IoC源码(十一)Spring refresh()方法解析后记2_实例化_09

所有的接口都打印了

最后我们在看SpringSimpleMultiBeanTest.java这个测试

浅析Spring IoC源码(十一)Spring refresh()方法解析后记2_spring_10

此时applicationContext.getBean()去获取的时候,其实bean已经实例化好了,spring默认是单例的,除非你配置该bean为懒加载,才会在这个时候进行实例化~

下一节,我们具体看下spring是如何注入属性值的~



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月09日 0

暂无评论

推荐阅读
fztgkkRjHIsV