IOC
即控制翻转,由之前我们需要对象去new变成由spring容器去创建、装配、销毁。
常见的容器
spring容器也就应用上下文分两种,一种是抽象的BeanFactory提供基本的功能,还有一种
继承BeanFactory更为高级的容器,也就是ApplicationContext。
常见的高级容器有
基于配置类:AnnotationConfigApplicationContext
基于类路径:ClassPathXmlApplicationContext
基于文件系统:FileSystemXmlApplicationContext
基于web:XmlWebApplicationContext
spring加载bean过程
以ClassPathXmlApplicationContext为例
1.调用setConfigLocations设置加载路径
2.调用refresh()方法,该方法为核心,会进行加载资源、配置文件解析、Bean定义的注册、组件的初始
3.在refresh()方法里,调用obtainFreshBeanFactory()刷新内部 BeanFactory(创建 BeanFactory 的入口)
4.在obtainFreshBeanFactory()方法会调用refreshBeanFactory(),在该方法里如果已经存在 beanFactory,将销毁旧实例,然后在创建新的 ConfigurableListableBeanFactory
5.refreshBeanFactory()里创建好BeanFactory后,会调用loadBeanDefinitions(),BeanDefinitions会贯穿整个Spring加载流程
6.之后doLoadBeanDefinitions()方法里调用registerBeanDefinitions()
7.在registerBeanDefinitions()进行doRegisterBeanDefinitions(),然后调用parseBeanDefinitions()进行完成bean的注册