0%
这是一片思考的空间 -- arthinking
Spring 重构&代码整洁之道 软件设计 JVM 并发编程 数据结构与算法 分布式 存储 网络 微服务 设计模式
Java技术栈 - 涉及Java技术体系

几张图快速理解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的生命周期

欢迎关注我的其它发布渠道

订阅IT宅
内功修炼
Java技术栈
Java架构杂谈是IT宅精品文章公众号,欢迎订阅:
📄 网络基础知识:两万字长文50+张趣图带你领悟网络编程的内功心法 📄 HTTP发展史:三万长文50+趣图带你领悟web编程的内功心法 📄 HTTP/1.1:可扩展,可靠性,请求应答,无状态,明文传输 📄 HTTP/1.1报文详解:Method,URI,URL,消息头,消息体,状态行 📄 HTTP常用请求头大揭秘 📄 HTTPS:网络安全攻坚战 📄 HTTP/2:网络安全传输的快车道 📄 HTTP/3:让传输效率再一次起飞 📄 高性能网络编程:图解Socket核心内幕以及五大IO模型 📄 高性能网络编程:三分钟短文快速了解信号驱动式IO 📄 高性能网络编程:彻底弄懂IO复用 - IO处理杀手锏,带您深入了解select,poll,epoll 📄 高性能网络编程:异步IO:新时代的IO处理利器 📄 高性能网络编程:网络编程范式 - 高性能服务器就这么回事 📄 高性能网络编程:性能追击 - 万字长文30+图揭秘8大主流服务器程序线程模型
📄 Java内存模型:如果有人给你撕逼Java内存模型,就把这些问题甩给他 📄 一文带你彻底理解同步和锁的本质(干货) 📄 AQS与并发包中锁的通用实现 📄 ReentrantLock介绍与使用 📄 ReentrantReadWriteLock介绍与使用 📄 ReentrantLock的Condition原理解析 📄 如何优雅的中断线程 📄 如何优雅的挂起线程 📄 图解几个好玩的并发辅助工具类 📄 图解BlockingQueue阻塞队列
📄 消息队列那么多,为什么建议深入了解下RabbitMQ? 📄 高并发异步解耦利器:RocketMQ究竟强在哪里? 📄 Kafka必知必会18问:30+图带您看透Kafka
📄 洞悉MySQL底层架构:游走在缓冲与磁盘之间 📄 SQL运行内幕:从执行原理看调优的本质 📄 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法