接前一天的调试,调试断点来到AggregateConstructorCommandHandler的handle方法:
首先调用AbstractRepository(提供aggregates存储的抽象,实际值为EventSourcingRepository)的newInstance构造一个Aggregate实例,传入的参数为命令handler的handle lambda表达式。
继续进入到LockingRepository(提供一个锁机制以防止对聚合类并发修改的Repository实现)的doCreateNew方法:
继续跟进到EventSourcingRepository(实现事件回溯机制的Repository,能够自动地发送新事件event到给定的EventBus并代理事件存储到给定的EventStore)的doCreateNewForLock方法:
继续跟进到EventSourcedAggregate(可以从已经被聚合类发布的事件中回溯出来的聚合类实现)的initialize方法:
该方法第一个参数是之前的handle lambda表达式,第二个是用来描述聚合类结构的监视器,第三个是EventBus,第四个是快照触发器。首先用除lambda回调以外的三个参数初始化一个EventSourcedAggregate实例,接着进入到AggregateLifecycle(模拟聚合类生命周期的抽象基类)的registerWithUnitOfWork方法:用当前的UnitOfWork注册该aggregate,最后进入到AnnotatedAggregate(允许聚合根变成一个带注解command和event的handler注解的POJO,此类的初始化在EventSourcedAggregate初始化里被调用过,初始化了EventBus和inspector)的registerRoot(注册聚合根并调用任何延迟的还未应用到聚合类的事件)方法:
继续进入到AggregateLifecycle的executeWithResult(执行给定的task返回执行结果)方法:
debug越跟越深,先暂停,明天继续。