package cn.org.rapid_framework.util.holder; import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.InitializingBean; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.BindException; import org.springframework.validation.Errors; import org.springframework.validation.Validator; /** * 用于持有Spring Validator,使调用Validator可以当静态方法使用. * * <pre> * static 方法调用: * SpringValidatorHolder.validate(object); * </pre> * <pre> * spring配置: * <bean class="cn.org.rapid_framework.beanvalidation.SpringValidatorHolder"> * <preperty name="validator" ref="validator"/> * </bean> * </pre> * @author badqiu * */ public class SpringValidatorHolder implements InitializingBean{ private static Validator validator; public void afterPropertiesSet() throws Exception { if(validator == null) throw new BeanCreationException("not found spring 'validator' for SpringValidatorHolder "); } @SuppressWarnings("all") public void setValidator(Validator v) { if(validator != null) { throw new IllegalStateException("SpringValidatorHolder already holded 'validator'"); } validator = v; } private static Validator getRequiredValidator() { if(validator == null) throw new IllegalStateException("'validator' property is null,SpringValidatorHolder not yet init."); return validator; } public static Validator getValidator() { return getRequiredValidator(); } public static boolean supports(Class<?> type) { return getRequiredValidator().supports(type); } public static void validate(Object object, Errors errors) { getRequiredValidator().validate(object, errors); } /** * 验证失败将抛出异常 * @param object * @throws BindException */ public static void validate(Object object) throws BindException { BeanPropertyBindingResult errors = new BeanPropertyBindingResult(object, object.getClass().getSimpleName(), true); getRequiredValidator().validate(object, errors); if(errors.hasErrors()) { throw new BindException(errors); } } public static void cleanHolder() { validator = null; } }