Spring IOC原理
说到spring不得不提其两大特性IOC、AOP,本文主要介绍结合代码看下spring Ioc相关原理,阅读源码如果只是为了看源码效率就会很低,还是要有一定的目的性,我们结合着以下的问题去源码中找答案。本篇文章为《图灵学院》课程笔记
- Bean工厂是如何产生Bean的
- Bean的依赖关系是由谁来解决的
- Bean工厂和应用上下文的区别
如下图spring Ioc的整体架构图中可以看出,Spring启动时读取bean配置信息,并在spring中生成一份相应bean配置注册表,然后会根据注册表实例化Bean,并且装配好bean 之间的依赖关系,为上层应用提供bean实例,其中bean的缓存池是通过hashmap实现的
bean的构建过程
spring.xml中保存了Bean的描述配置,BeanFactory读取这些配置然后生成bean,这是我们对ioc原理的一般理解,深入思考还会有更多问题产生
- 哪个java对象承载了配置信息里的内容
- 这些承载对象是读取配置文件并装载的
- 这些装载对象又保存在哪里
BeanDefinition(Bean定义)
ioc 实现中 我们在xml 中描述的Bean信息最后 都将保存至BeanDefinition (定义)对象中,其中xml bean 与BeanDefinition 程一对一的关系。xml bean中设置的属性最后都会体现在BeanDefinition中
由此可见,xml bean中设置的属性最后都会体现在BeanDefinition中。如:
**XML-bean ** | BeanDefinition |
---|---|
class | beanClassName |
scope | scope |
lazy-init | lazyInit |
constructor-arg | ConstructorArgument |
property | MutablePropertyValues |
factory-method | factoryMethodName |
destroy-method |