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做嫁衣

posted @ 2024-02-25 14:34  jishaleng  阅读(4)  评论(0编辑  收藏  举报