Spring 如何解决循环依赖的问题

Spring 解决循环依赖的思路

循环依赖之所以能解决,核心在于:实例化(Create)初始化(Populate) 是两个分开的阶段。Spring 的做法是:只要 new 出了对象,就先不管属性有没有填好,直接把这个 “半成品” 的引用(或者获取引用的工厂)暴露出去。这样,当 B 需要 A 时,拿到的虽然是空壳,但地址是正确的。为了在不同阶段管理这些 Bean,Spring 准备了三个 Map:

Spring IoC 和 DI 的简单实现

源码跟踪

在这篇文章中,我将着重详细介绍 springframework(这里使用的版本是 6.2.15)的控制反转(IoC)和 依赖注入(DI)的具体实现,并带你真正手搓一个简化的 spring 容器出来。注解形式的 IoC 容器在元数据解析的实现上与 xml 形式有差异,但在容器运行整体流程上二者基本相同,这里仅以 xml 的视角为例进行说明。

Spring 的本地事务

什么是事务?

事务的定义:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由一个或多个数据库操作(通常是 SQL 语句)序列组成。这些操作要么全部执行成功,要么全部撤销(回滚),它使数据库从一种一致性状态变更为另一种一致性状态。事务有四个最基本的特性,即所谓的 ACID,以最经典的转账业务为例:

storm分组策略

内置分组策略

storm 内置了 8 种流分组的方式,通过实现 CustomStreamGrouping 接口可以实现自定义的流分组。InputDeclarer 接口定义了不同的流分组方式,每当TopologyBuilder#setBolt 方法被调用就返回该对象,用于声明一个bolt的输入流以及这些流应当如何分组。该接口定义的所有分组方法如下: