流程编排器
ProcessorArrayList.java
package com;
import java.util.ArrayList;
import java.util.List;
public final class ProcessorArrayList<E extends Object> extends ArrayList<E> {
private List<E> procList;
private final String name;
public ProcessorArrayList(String name){
this.name = name;
}
public void init(){
if(!isEmpty(procList)){
for(Object obj : procList){
if(obj instanceof List){
addAll((List<E>)obj);
}else{
add((E) obj);
}
}
}
}
private boolean isEmpty(List list){
return list == null || list.isEmpty();
}
public List<E> getProcList() {
return procList;
}
public void setProcList(List<E> procList) {
this.procList = procList;
}
}
package com.processor;
public class ApplyPayProcessor {
public ApplyPayProcessor(){
}
}
package com.processor;
public class RequestLogProcessor {
public RequestLogProcessor(){
}
}
package com.processor;
public class ResponseLogProcessor {
public ResponseLogProcessor(){
}
}
package com.processor;
public class RiskVerifyProcessor {
public RiskVerifyProcessor(){
}
}
xml编排
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="requestLog1Processor" class="com.processor.RequestLogProcessor" />
<bean id="responseLog1Processor" class="com.processor.ResponseLogProcessor" />
<bean id="riskVerify1Processor" class="com.processor.RiskVerifyProcessor" />
<bean id="applyPay1Processor" class="com.processor.ApplyPayProcessor"/>
<bean id="prefix" class="com.ProcessorArrayList" init-method="init">
<constructor-arg value="prefix" />
<property name="procList">
<list>
<ref bean="requestLog1Processor" />
</list>
</property>
</bean>
<bean id="suffix" class="com.ProcessorArrayList" init-method="init">
<constructor-arg value="suffix"/>
<property name="procList">
<list>
<ref bean="responseLog1Processor" />
</list>
</property>
</bean>
<bean id="commonPayProcessors" class="com.ProcessorArrayList" init-method="init">
<constructor-arg value="commonPayProcessors"/>
<property name="procList">
<list>
<ref bean="prefix"/>
<ref bean="riskVerify1Processor"/>
<ref bean="suffix"/>
</list>
</property>
</bean>
<bean id="testProc" class="com.ProcessorArrayList" init-method="init">
<constructor-arg value="testProc"/>
<property name="procList">
<list>
<ref bean="commonPayProcessors"/>
<ref bean="applyPay1Processor"/>
</list>
</property>
</bean>
</beans>
附带策略组装器
TaskStrategy.java
public abstract class TaskStrategy<R> {
public TaskStrategy() {
StrategyComponent.register(getName(), this);
}
public abstract String getName();
public abstract R execute(Object ...params);
}
StrategyComponent.java
public final class StrategyComponent {
private static Map<String, TaskStrategy> taskStrategyMap = Maps.newHashMap();
protected static void register(String code, TaskStrategy taskStrategy) {
taskStrategyMap.putIfAbsent(code, taskStrategy);
}
public static TaskStrategy getStrategy(String code) {
return taskStrategyMap.get(code);
}
}