Spring的Ioc容器的实例化过程详解

   依然还是针对Spring面试题的内容,这次我想记录下Spring容器是如何进行bean的加载以及整个容器初始化的过程理解,都是个人看书后的理解,如有不正确的地方,欢迎指正!

   spring 的Ioc容器在通常意义上理解可以分为两类:BeanFactory 和 ApplicationContext;BeanFactory是Spring容器最初级的单位,而ApplicationContext是实现BeanFactory接口的一个针对web开发而产生的一个拥有更多spring定制功能的容器,如国际化、AOP;对于spring容器在开发中所起的作用就是将ConfigurationMetaData(配置信息,就是我们常用的Xml配置)中所有的信息包装成一个轻量化容器的过程;而这个过程我们可以简单划分为两部:1、容器的启动;2、Bean对象的实例化;

    1、容器的启动包含:将所有xml配置中的<bean>标签元素当然也包含其他标签如<import>通过BeanDefinition类(叫做bean定义信息对象)进行封装,生成对应的BeanDefinition实例对象,然后调用BeanDefinitionRegistry的register方法将BeanDefinition加入registry容器中;

     2、容器中bean的实例化:当所有beanDefinition对象都已经准备好之后,spring框架会在容器初始化时就调用getBean——》doGetBean——》createBean——》doCreateBean这个流程将所有的bean对象进行初始化过程,所有的bean对象最后存储的容器是DefaultListableBeanFactory;

概念:beanFactoryPostprocessor(容器启动阶段):BeanDefinition对象的后置处理器,在beanDefinition初始化之前,我们可以通过实现这个接口来修改对应的beanDefinition,也就是修改bean的初始定义信息;而且spring框架也为我们提供了一些beanFactoryPostprocessor的实现类,如PropertyPlaceholderConfigurer(属性占位符):在xml配置文件中我们可以把对数据库连接的动态配置抽离到properties文件中,方便后期对数据库的管理:${}美元符号这个属性占位符就可以动态加载propertis文件中有关数据库地址、用户、密码;

beanPostProcessor(bean的实例化阶段):bean对象的后置处理,在bean真正初始化之前,我们可以通过实现这个接口对bean的有关属性,或者方法进行修改,在spring中有AOP就是通过beanPostProcessor在bean创建之后创建bean的代理对象;

 

 

 

 
上一篇:1.4.1. Dependency Injection(依赖注入)


下一篇:7.图形交互----cmmnV1.1