IOC简单理解
IOC
refreshBeanFactory()
0、实例化容器(一个Map<String, BeanDefinition>)
1、资源加载器加载解析配置文件
-
资源加载器接口ResourceLoader
-
资源的抽象和访问接口Resource
- FileSystemResource,文件系统资源的实现类
- ClassPathResource,classpath下资源的实现类
- UrlResource,对java.net.URL进行资源定位的实现类
2、解析配置文件,获得声明式的类的信息(bean定义信息)
4、类的信息注册为BeanDefinition
invokeBeanFactoryPostProcessors(beanFactory)
5、提供接口修改BeanDefinition
- BeanFactoryPostProcessor
registerBeanPostProcessors(beanFactory)
6、注册BeanPostProcessors
7、实例化Bean
- 实例化策略:构造函数实例化Bean;CGLIB动态生成子类实例化Bean
8、通过反射进行属性填充
- PropertyValue(String name, Object value)
- value为字符串,直接为bean的属性赋值
- name不存在,则为bean添加新的属性和值
- 存在ref,value为BeanReference,进行依赖注入
9、初始化Bean
- 执行BeanPostProcessor的前置处理方法
- 执行Bean的初始化方法
- 执行BeanPostProcessor的后置处理方法
10、注册含销毁方法的Bean
11、Bean添加单例池(一个Map<String, Object>)
Spring中BeanDefinition都是在为Bean做嫁衣