一切都要从容器的创建开始,无论什么结合方法实现的都是先创建一个容器,而容器的创建大致可以分为xml方式,注解方式实现的容器,而其根容器通常为beanFactory
这是一种经典的xml的创建方式,其它xml的创建方式不在做细分。
这是注解方式实现的spring ioc容器的创建操作。
------------------------------------------------------以上为两大类实现ioc容器的方式
无论哪种方式创建的ioc容器,最终都会走到如图所示的refresh方法,这个方法为ioc容器的创建的核心方法,spring源码解析操作,大部分也都是围绕这个方法进行描述。
注意这里的两个方法实现的是对于的类的解析操作,生成对应的beanDefinition,之后将beanDefinition放入到beanFactory实例的beanDefinitionMap中。
而这里配置相关的beandefinition的是在执行refresh方法执行执行的,放入到beanDefintionMap中的
注意到这里的方法主要用于配置类相关的解析操作,对于其配置类上的@ComponentScan,@Scan进行相应的解析操作,同将对应条件之下bean创建成beanDefinition之后放入beanDefinitionMap中
到此beanDefinition创建完成,也就是完成bean创建对象的必要的第一步工作。
注意到这个方法,是将beanDefinitionMap中的实例拿出来进行逐个解析并实例化创建对象(代理对象,或者bean对象),完成ioc容器的bean所有的创建工作。
注意到这里的doGetBean方法,正是这个方法完成了bean对象的创建工作,并将其创建成功bean对象(可能是代理对象,aop的实现也是存在于此处,请看aop解析相关博客)放入到singletonObjects中。
beanPostProcessor主要用于完成属性的注入操作,此处正式aop实现之处,详细情况spring 源码解析,aop相关解析
-----------------------------------------------------到此bean算是创建完成,之后随的ioc容器的销毁,bean对象也随即销毁。
其它附加信息