Spring框架——SpringEL


數據驗證

數據驗證不應該被限定在Web層處理

Validator接口:

Spring提供Validator接口來進行對對象的驗證

  • supports(Class)

判斷validator是否能校驗提供的class實例

  • validate(Obeject,org.springframework.validation.Errors)

校驗給定的對象,有校驗失敗信息放入Errors對象

底層實現

@Component
public class UserValidator implements Validator {
	//驗證的是否為同一類型
	@Override
	public boolean supports(Class<?> arg0) {
		return User.class.equals(arg0);
	}
	//將驗證錯誤信息存在Errors集合里
        //ValidationUtils 工具類
	@Override
	public void validate(Object arg0, Errors arg1) {
		//驗證是否為空
		ValidationUtils.rejectIfEmpty(arg1, "id", "id can't be null", "id不能為空");
		User u=(User)arg0;
		ValidationUtils.rejectIfEmpty(arg1, "name", "name.empty", "用戶名不能為空");
		
		//驗證日期
		if(u.getBirthday().getTime()>new Date().getTime()){
			arg1.rejectValue("birthday", "birthday.wrong", "出生日期不能晚於當前時間");
		}
	}

}

框架使用

SpringMVC還支持聲明式驗證@Controller輸入

SpringEL

介紹

Spring表達式語言(簡稱SpEL)是一個支持查詢和操作運行時對象導航圖功能的強大的表達式語言

不直接依賴於Spring,可獨立使用

底層實現:接口ExpressionParser負責解析表達式字符串

EL配置元數據

#{}

xml文件使用

<!--靜態注入-->
<bean id="Memory" class="com.xml.Memory">
	<property name="memoryNum" value="1024"></property>
</bean>
<!--動態注入 #{id.name}-->
<bean id="Computer" class="com.xml.Computer">
	<property name="memoryNum" value="#{Memory.memoryNum }"></property>
	<property name="memory" ref="Memory"></property>
</bean>

java注解使用

@Component("computer")
public class Computer {
        //@Value("#{引用的名字.屬性}")
	@Value("#{memory.memoryNum }")
	private int memoryNum;
        //@Value("#{引用的Bean的@Component("name")的name}")
	@Value("#{memory }")
	private Memory memory;
	public int getMemoryNum() {
		return memoryNum;
	}
	public void setMemoryNum(int memoryNum) {
		this.memoryNum = memoryNum;
	}
	public Memory getMemory() {
		return memory;
	}
	public void setMemory(Memory memory) {
		this.memory = memory;
	}
}

EL可以使用的場景

  • 方法

    • EL可以調用一個對象的屬性、方法,並將返回值注入給另一個對象的屬性
    • @Value("#{'tea'.toUpperCase()}")
    • 參數只能傳常量,不能是變量
  • 構造

    • EL可以調用new關鍵字,實現構造方法調用,實例化出對象
    • @Value("#{new int[]{1,2,3}}")
    • @Value("#{new 包名.類名()}")
  • 操作符

    • EL支持大多數的算數運算符,@Value("#{3+4}")
    • 關系運算符 @Value("#{1^1}")
    • 邏輯運算符 @Value("#{5>3}")
    • 三元運算符 @Value("#{1> 2? 0:1}")
  • 集合

    • 支持List @Value("#{A.list}")
    • Properties
    • Map @Value("#{A.map['1']}")
    • 集合的選擇
      • .?[] 設置篩選條件
        • @Value("#{A.list.?[li>1]}")
        • @Value("#{A.map.?[key=='1']}")
      • .^[] 獲取第一個匹配項
      • .$[] 獲取最后一個匹配項 
    • 集合的投影
      • .![] 選擇特定屬性
      • @Value("#{A.students.![name]}")
    • 選擇和投影可以結合使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM