IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法.EventBus定义了一个Dictionary容器来存放事件和处理该事件的对象(其实不是对象而是Factory,暂且这样理解无妨).其key是Type:在ABP使用Type表示不同的事件,具体而言这个type是EventData派生类的类型.EventData在ABP中有两个作用:第一用于封装事件数…
动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能,这应该算是对DRY的最佳诠释了. 如下图所示,一行代码就为所有实现了IApplicationService的类型,自动创建对应的动态WebAPI. 这么Magic的功能是如何实现的呢? 本文为你揭开其Magic的外表.你会发现,实现如此Magic的功能,最关键的代码只有四行. 先思考一个问题:如果不…
AbpZeroDbContext:配置ABP.Zero中定义的entity的Dbset EntityFrameworkModelBuilderExtensions:给PrimitivePropertyConfiguration添加了扩展方法用于创建Index. AbpZeroDbModelBuilderExtensions:给DbModelBuilder添加了扩展方法用于表的重命名. AbpZeroEntityFrameworkModule:很明显Abp Zero模块中的EntityFramew…
一:原理分析 主要sendExtraCommand方法中传递两个参数, 根据如下源码可以知道第一个参数传递delete_aiding_data,第二个参数传递null即可. @Override public boolean sendExtraCommand(String command, Bundle extras) { long identity = Binder.clearCallingIdentity(); boolean result = false; if ("delete_aidin…
本篇文章主要剖析Spark的内存管理体系. 在上篇文章 spark 源码分析之十四 -- broadcast 是如何实现的?中对存储相关的内容没有做过多的剖析,下面计划先剖析Spark的内存机制,进而进入内存存储,最后再剖析磁盘存储.本篇文章主要剖析内存管理机制. 整体介绍 Spark内存管理相关类都在 spark core 模块的 org.apache.spark.memory 包下. 文档对这个包的解释和说明如下: This package implements Spark's memory…
我们定义一个组件的时候,可以在组件的某个节点内预留一个位置,当父组件调用该组件的时候可以指定该位置具体的内容,这就是插槽的用法,子组件模板可以通过slot标签(插槽)规定对应的内容放置在哪里,比如: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script s…
jQuery.Callbacks()提供的回调函数队列管理本来是延时回调处理的一部分,但是后面将其独立出来作为一个模块.jQuery就是这样,各个模块间的代码耦合度是处理的比较好的,值得学习.虽然是从延时回调处理中独立出来的,但是它的功能非常强大,提供了一种强大的方法来管理回调函数队列. 大家都明白封装函数的目的:去耦合与简化操作. 通常情况下函数队列的处理方式 //执行函数 function runList(arr){ for(var i = 0; i < arr.length; i++){…
本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 之前我们讲解了从缓存中获取单例的过程,那么,如果缓存中不存在已经加载的单例bean就需要从头开始bean的加载过程了,而Spring使用getSingleton的重载方法实现bean的加载过程. /** * Return the (raw) singleton object registered under the given name, * creating and register…
前言 jQuery动画是通过animate这个API设置执行的,其内部也是按照每一个animate的划分封装了各自动画组的行为, 包括数据过滤.缓动公式.一些动画默认参数的设置.元素状态的调整.事件的处理通知机制.执行等等 换句话说,我们可以把animate看作一个对象,对象封装自己的一系列属性与方法. jQuery可以支持连续动画,那么animate与animate之间的切换就是通过队列.queue,这个之前就已经详细的解释过了 动画的参数 jQuery的内部的方法都是针对API的处理范围设计…
Thinkphp的插件机制主要依靠的是Hook.class.php这个类,官方文档中在行为扩展也主要依靠这个类来实现.下面我们来具体看看tp是怎么利用这个类来实现行为扩展的. 首先,行为扩展是什么?有wordpress二次开发经验的同学应该很容易明白,其实就是钩子,tp在其内核的执行过程中内置了诸多钩子,这些钩子可以允许我们能够在不改变内核代码的基础上来对内核进行一定程度的修改.tp的钩子机制的实现类就是Hook.class.php. Hook.class.php内部维护了一个数组,这个数组的键…