(1) 初始化容器 (2) 扫描所有注解并注册到容器中 (3) 实例化容器对象
- 注入对象
- 声明对象被ioc容器管理
- 循环依赖
- 注入指定bean
- @Aspect
- @Pointcut
- @Before
- @After
- @Order
Spring refresh()流程 0. 设置容器启动
- 进入refreshBeanFactory()方法
- 进入判断容器是否初始化,如果没初始化创建基本的DefaultListableBeanFactory容器
- 调用loadBeanDefinitions(DefaultListableBeanFactory beanFactory)(将配置文件解析成BeanDefinition对象,并注入到BeanFactory中)
- 创建BeanDefinitionReader,并调用loadBeanDefinitions(String... locations)(通过模板方法getResource来获取Resource集合)
- 调用BeanDefinitionReader的loadBeanDefinitions(Resource resource)(将Resource解析成文档对象,这些对象并没有按照Spring的Bean规则进行解析);
- 调用registerBeanDefinitions(Document doc,Resource resource),通过BeanDefinitionDocumentReader的BeanDefinitionParserDelegate 将文档对象解析成BeanDefinitionHolder,BeanDefinitionHolder包含BeanDefinition和Bean别名,Bean的名字等。 并通过注入到registerBeanDefinition(String name, BeanDefinition beanDefinition)注入到DefaultListableBeanFactory容器中