zoukankan      html  css  js  c++  java
  • 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]}")
      • 选择和投影可以结合使用
  • 相关阅读:
    【Log】【Log4j】【1】log4j日志的输出级别
    【Word&Excel】【1】更新Word的目录
    【服务器】【Windows】【5】让bat执行完后不关闭
    【Mybatis】【5】Oralce in 语句中当in(1,2,3...) 条件数量大于1000将会报错
    【JS插件】【1】移动端(微信等)使用 vConsole调试console
    【Oracle】【10】去除数据中的html标签
    【其他】【前端安全】【1】XSS攻击
    hdu 4433
    hdu 4435
    hdu 4752
  • 原文地址:https://www.cnblogs.com/occlive/p/13558522.html
Copyright © 2011-2022 走看看