IOC容器及其原理(一)
一个bean诞生需要经过两个阶段,容器启动阶段和Bean实例化阶段。
下面我们通过这个图来说明
加载 解析配置信息,主要就是依靠ResouceLoader来加载并且解析资源(xml文件),然后封装成了Resouce。
装配BeanDefinition 就是BeanDefinitionReader读取Resource 转换为BeanDefinition, BeanDefition含有这个Bean的Class对象,可以利用反射机制生成这个对象。然后注册BeanDefinition. 就是把信息存放到一个concurrentHashMap中,key为bean的名字,value为beandefinition。
后处理指的是容器启动阶段的定制操作,通过实现BeanFactoryPostProcessor接口来进行定制,就是获得BeanDefinition,修改BeanDefinition.如下图所示。
Spring 实例化对象,利用bean的class对象反射机制生成对象,并且装配依赖。前置处理,后置处理都能得到bean,修改bean。
如果一个bean不是单例的,那么到执行getBean才会实例化和注入依赖。