Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益——百度百科。
- xml版本
- 优点:降低耦合,使容易扩展、对象之间的关系一目了然、xml配置文件比注解功能齐全
- 缺点:配置文件配置工作量相对注解要大
- 注解版本
- 优点:在class文件中,可以降低维护成本、提高开发效率
- 缺点:如果对annotation进行修改,需要重新编译整个工程、业务类之间的关系不如XML配置那样一目了然、程序中过多的annotation,对于代码的简洁度有一定影响、annotation貌似功能没有xml配置文件齐全
今天在这里要讲解的是spring的注解版本中的自定义注解的方法。在开发项目过程中难免会遇上特殊需求要我们完成设计工作,但是框架自带的注解功能不足以完成这些特殊需求。这时候就需要我们手动自定义一些注解来完成对这些特殊需要的设计工作了。好了废话咋就不多说了,还是直接上代码比较稳妥啊。
步骤一:初始化注解接口的默认数据
import cn.suancloud.pdfjk.api.util.validation.config.BetweenValidImpl;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
/**
* @author chaoyou
* @email
* @date 2019-9-6 17:41
* @Description 这是自定义的一个注解@betweenValid,用来校验一个数值是否存在某个区间范围内
*/
@Documented
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { BetweenValidImpl.class})
public @interface BetweenValid {
// 在注解没有显示申明,则min值默认是 -0.5
double min() default -0.5;
// 在注解没有显示申明,则min值默认是 0.5
double max() default 0.5;
// 错误信息
String message() default "输入的单价异常值不正常";
// 分组信息
Class<?>[] groups() default {};
// 不知道是干嘛的。。。
Class<? extends Payload>[] payload() default {};
}
步骤二:初始化注解接口实现类的配置参数,实现类必须实现一个框架原始注解接口:ConstraintValidator<注解接口, 数据类型>
import cn.suancloud.pdfjk.api.util.validation.inter.BetweenValid;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* @author chaoyou
* @email
* @date 2019-9-6 17:50
* @Description 这是自定义的校验类,一个数字是否between 某个范围
*/
public class BetweenValidImpl implements ConstraintValidator<BetweenValid, Double> {
// 初始化区间的边界
private Double min;
private Double max;
/**
* 初始化方法,在里面进行一些设定,我在这里获取注解中属性值,方法参数,就是上面泛型参数的第一个参数 ;
*/
@Override
public void initialize(BetweenValid constraintAnnotation) {
max = constraintAnnotation.max();
min = constraintAnnotation.min();
}
/**
* 第一个参数,就是泛型参数的第二个参数 ;
*
* 进行检验,返回 false 代表校验没通过,返回 true 代表校验通过
*/
@Override
public boolean isValid(Double value, ConstraintValidatorContext context) {
if (value == null){
return false;
} else if (Double.valueOf(value) < min || Double.valueOf(value) > max){
return false;
}
return true;
}
}
好了,自定义注解的两个步骤已经完成了。springboot和spring环境均可以使用。希望对你们有帮助吧。