1:加载配置文件
先调用静态代码块处理weblogic8.1的时候的bug。
先调用父类的构造方法,在父类的构造方法里获取资源处理器。
第一步先设置资源的加载对象
第二步setConfigLocations加载到xml配置文件,放进去,再创建环境调用system.getpropertise获取环境相关变量配置等,开始读取xml文件里的信息,用处理器将${等进行替换成真正的值,最后调用
refresh里面调用obtainfreshbeanfactory()进行创建beanfactory工厂。
第三步loadBeanDefinitions(beanfactory),开始加载,而且多次调用用到
第四步getConfigLocations获取到xml配置文件,开始解析,判断是否有classpath*,war等
最后返回resourse对象
第五步加载loadBeanDefinitions(encoderesourse),将其配置文件变成流形式解析。
第六步开始干活调用doloadBeanDefinitions将流读取成Document,进行格式判断,解析xml里面的标签。
doregisterBeanDefinitions读取标签,进行注册,在进行解析parseBeanDefinitions
所有方法名前加do的都是实际干活的,里面空的方法无实现就是给扩展用的,扩展性好
2:扫描相关类
doscan开始扫描包,类里注解的扫描等具体的判断,调用DefaultListableBeanFactory的registerBeanDefinitions注册,将创建好的对象放到beandefinitionmap的value里,还没有实例化,
之后又开始判断解析,有bean的名称是否唯一,属性判断等,解析属性property等
上面完成了ioc的初始化过程。
开始prepareBeanFactory(beanFactory)。
对对象的初始化先增强beanpostproccesor(容器对象,自己new的是普通对象),设置到beanfactory里,之后开始初始化
3:初始化所有相关的实例,并放入ioc容器中
postproccesorbeanfactory给子类扩展,invokebeanfactorypostproccesor(工厂的对象先实例化),(这里有bean的生命周期可以考,aware最终接口下面有很多aware子类)调用aware子类一系列方法初始化对象
4:完成依赖注入
5:初始化handlermapping
6:运行阶段