关闭

用Command实现校验器

192人阅读 评论(0) 收藏 举报

最近工作中遇到许多校验的数据,一直用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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:308761次
    • 积分:4659
    • 等级:
    • 排名:第6282名
    • 原创:136篇
    • 转载:230篇
    • 译文:0篇
    • 评论:19条
    最新评论