几张图快速理解Spring IoC容器

番外篇

农夫需要把菜运输到大象国去卖

mojfyhmk

于是自己创建了一个工厂专门生成运输工具(工厂模式)

aszhsr

后来农夫觉得自己开工厂太费劲了,于是去寻找有直接生产运输工具的工厂。终于找到了一个叫做IoC的工厂

fdlefrmb

农夫从IoC工厂那里直接购买了一个运输工具(getBean),由于农夫之前也没见过飞机和轮船,不知道这个究竟是个什么运输工具。但是由于有运输工具的使用说明书(接口方法),农夫成功的使用运输工具把菜运输到了大象国。

qjvtfape

接下来我们来去探讨采访下IoC工厂的流水线是怎么加工生产产品的。

RES员工(Resource)负责接收生成运输工具需求,包括运输工具的创建参数(xml配置)和图纸(Class),以及依赖的其他零部。

bfldfmw

BDR员工(BeanDefinitionReader)负责分析需求,并且把需求整理为工厂内部规范的格式BeanDefinition。

ddlnm

BF员工(BeanFactory)拿到BDR员工提供的BeanDefinition开始制造产品,三号员工同时负责外部交易,通过向客户提供getBean方法让客户来这里拿产品。

slwwcvsl

1
2
3
4
ClassPathResource res = new ClassPathResource("spring.xml");
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(res);

后来厂长觉得前面三号员工这样相互配合环节还是太多了,于是招了一个全栈工程师ApplicationContext,同时能够做前面三号员工的工作。

ylnbvjyc

1
2
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
applicationContext.getBean(TestLifeCycle.class);

这个全栈工程师是一个勤奋的员工,学习了很多技能:

  • 从ApplicationEventPublisher那里学会了事件监听机制,可以让工厂里面的产品之间发送接收消息;
  • 从MessageSource学会了外语交流能力;
  • 从InitializingBean那里学会了售后服务,在卖出产品后,接收用户的需求调整;
  • 从BeanPostProcessor那里学会了售前售后。

1、Spring IoC容器功能

image-20191128212037514

详细介绍:Spring IoC容器功能大全 4.0.0.RELEASE

2、Spring IoC容器设计原理

image-20191013171437365.png-itzhai

IoC容器接口设计

image-20191130120910305

详细介绍:Spring IoC原理剖析

BeanFactory容器设计原理

image-20191029232845474

ApplicationContext设计原理

image-20191103175710896

详细介绍:Spring IoC Q&A

3、Spring IoC容器初始化流程

image-20191117200601820

详细介绍:Spring IoC原理剖析

4、Spring IoC容器依赖注入流程

BeanFactory.getBean(String name)

Bean实例化

image-20191102120151297

Bean初始化

createBean中调用了populateBean方法,该方法进行了依赖注入处理,主要通过bean definition中的属性值填充BeanWrapper中的bean实例

详细介绍:Spring IoC原理剖析

5、Spring事件监听机制

image-20191113082055722

详细介绍:Spring事件驱动模型

6、Spring Bean的生命周期

image-20191117200054987

详细介绍:Spring IoC之Bean的生命周期

arthinking wechat
欢迎关注itzhai公众号