做一个合格的程序猿之浅析Spring IoC源码(十一)Spring refresh()方法解析后记2

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


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


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

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


我们接着分析第684行代码

进入invokeBeanFactoryPostProcessors这个方法


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





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


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


接着看refresh()这个方法


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


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


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

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

所有的接口都打印了


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

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


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










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值