Spring IOC是什么?不就是内部一个Map通过名字获取到对应的Bean实例嘛!
具体步骤的思考?
- 原材料XML,如何变成我们的对象?
- 需要定制解析工具类,进行XML的解析,那解析出来的信息存放哪里?
- 有了信息,我们可以构建对象了吧?我们真的就简单的通过反射,
c1.newInstance()
这么搞下收工?
可能我们粗略想来,Spring的IOC
可能就是完成上面的三个思考,但如果深挖,你会发现很多问题。
问题一:原材料的解析
Spring框架前期使用XML的方式进行配置,那这些XML是否有规范?这里就涉及到DTD
和XSD
的两种验证模式。
问题二:解析出来的信息
为了我们完成IOC
对对象的创建管理,关于创建,我们需要干啥:构造方法多个咋办、哪些对象属性需要摄入(基本数据类型,引用对象)、所有的实例一定能通过配置文件配置出来(会不会依赖太多,让开发者直接骂娘)等等。同时解析出来的信息肯定需要定义一个对象,这些对象有需要存放在哪里?
问题三:实例化
通过反射就实例化了?Spring IOC不是很多扩展功能,那反射实例化完了,我们还能怎么玩,所以这里肯定不是这么简单的反射实例化完成了。涉及到对Bean生命周期的分析
,关于Bean的生命周期,也是面试中常问道的问题,可能通过网上的资料,我们面试过程中对答如流,但试问,你有没有在业务中具体的使用?真的对Bean的生命周期了解的很透吗?
带着以上问题,我们开启我们Spring源码解析之路,我们会发现这三个问题会以此扩展出不同的问题,然后我们层层深入,算对Spring源码有个基本的了解,而真正说精通,还是需要在实际开发过程中应用熟悉。