用Command实现校验器

来源:互联网 发布:react.js ui 编辑:程序博客网 时间:2024/06/05 18:57

最近工作中遇到许多校验的数据,一直用if-else去校验很不灵活,于是用Command方式去实现

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd               http://www.springframework.org/schema/aop               http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"default-autowire="byName"><bean id="uerVerification" class="com.steven.UserVerification" /><bean id="mobileVerification" class="com.steven.MobileVerification" /><bean id="codeVerification" class="com.steven.CodeVerification" /><bean id="orderVerification" class="com.steven.OrderVerification" /><bean id="orderVerificationMap" class="java.util.HashMap" > <constructor-arg><map><entry key="check" value-ref="orderVerification" /></map></constructor-arg></bean><bean id="codeVerificationMap" class="java.util.HashMap" > <constructor-arg><map><entry key="check" value-ref="codeVerification" /></map></constructor-arg></bean><bean id="mobileVerificationMap" class="java.util.HashMap" > <constructor-arg><map><entry key="check" value-ref="mobileVerification" /></map></constructor-arg></bean><bean id="uerVerificationMap" class="java.util.HashMap" > <constructor-arg><map><entry key="check" value-ref="uerVerification" /></map></constructor-arg></bean><!-- 实现类 -->     <bean id="gdActivityServiceInvoker" class="com.test.ServiceInvoke" >    <property name="verifyMap"><map><entry key="checkUer" value-ref="uerVerificationMap" /> <entry key="checkMobile" value-ref="mobileVerificationMap" /><entry key="checkCode" value-ref="codeVerificationMap"/><entry key="checkOrder" value-ref="orderVerificationMap"/></map></property>    </bean></beans>
注:上述配置文件,可以灵活的使用校验器,也可以灵活的增加或者删除校验器,并且支持执行校验器特定的方法。

public abstract class ActivityServiceInvoker {/** * 校验参数 * verifyType 表示特定的校验器 */public abstract ActivityResult checkParamter(String verifyType,ActivityParamter paramter);@SuppressWarnings({ "unchecked", "rawtypes" })public ActivityResult execute(Verification verification, String method, ActivityParamter paramter) throws Exception {Class clazz = verification.getClass();Method clzMethod = clazz.getDeclaredMethod(method,ActivityParamter.class);return (ActivityResult) clzMethod.invoke(verification, paramter);//执行特定的校验方法}}

每一个校验器可以继承ActivityServiceInvoker这个类,然后复写public abstract ActivityResult checkParamter(String verifyType,ActivityParamter paramter);这个方法即可。

public class OrderServiceInvokerImpl  extends ActivityServiceInvoker{private LinkedHashMap<String,HashMap<String, Verification>> verifyMap;//可以灵活的注入校验器private static final Log LOG = LogFactory.getLog(OrderServiceInvokerImpl.class);public ActivityResult checkParamter(String verifyType,ActivityParamter paramter){//在这里进行数据校验return result;}public void setVerifyMap(LinkedHashMap<String, HashMap<String, Verification>> verifyMap) {this.verifyMap = verifyMap;}}
每一个实现类里,可以配置一个verifyMap来灵活的校验。


0 0
原创粉丝点击