Spring是一個開源框架,它由Rod Johnson創建。它是為了解決企業應用開發的復雜性而創建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益——百度百科。
- spring框架總體上可以拆分成聲明式xml版本和聲明式注解版本。簡單介紹一下這兩個版本各自的優缺點:
- xml版本
- 優點:降低耦合,使容易擴展、對象之間的關系一目了然、xml配置文件比注解功能齊全
- 缺點:配置文件配置工作量相對注解要大
- 注解版本
- 優點:在class文件中,可以降低維護成本、提高開發效率
- 缺點:如果對annotation進行修改,需要重新編譯整個工程、業務類之間的關系不如XML配置那樣一目了然、程序中過多的annotation,對於代碼的簡潔度有一定影響、annotation貌似功能沒有xml配置文件齊全
- 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環境均可以使用。希望對你們有幫助吧。
