5.实例
该例子包含了如下制品:
GenericProcess的实现,正如你所见,它包含的代码没什么意义,事实上它从未会包含任何有意义代码。这个类的唯一目的就是作为应用代表各个活动的拦截过滤器链的目标类。
它相应的Spring定义为:
PurchaseItem(购买物品)流程的其他配置包括三部分:
第一部分(第14行)——流程装配AOP配置,包含把GenericProcessImpl.execute(..)方法定义为连接点(Join Point)的pointcut。你还可以看到我们使用了bean(purchseItem) pointcut表达限定我们正在拦截哪个bean。通过用应用于不同过滤器链的不同bean名创建GenericProcessImpl的另一个实例,我们可以定义多个流程。它还包含了对实现为Aopaliance拦截器的活动过滤器的引用。默认的,过滤器按照从顶置底的顺序排列,然而为了更清楚,我们还可以使用order属性。
第二部分(第30行)——通过定义ActivityFilterInterceptor的三个实例来配置活动拦截器。每个实例将被注入后面定义的相应POJO活动bean和事实属性。事实属性定义了一个简单的规则机制,允许我们描述一个简单的条件,基于此,下面的活动将被允许或不允许执行。例如:validateItemFilter定义了 “!VALIDATED_ITEM”事实规则,它将被解释为:如果VALIDATED_ITEM事实还未被注册在事实注册表中,则允许调用活动。只要validatItemActivity执行了,这一事实将被注册在事实注册表中:如果这一事实还未注册,它将允许这一活动执行;如果事实已经注册,它将在流程与同一执行上下文一起重新提交时保护该活动不会被重复执行。