文章目录

  • Spring的验证更严格。
  • Spring验证的简单小例子
  • Validator的使用
  • SpringEL简介
  • SpringEL介绍
  • SpringEL使用
  • 基于xml配置数据源
  • 项目结构
  • Computer.java
  • IntelCPU.java
  • Memory.java
  • Test.java
  • beans.xml
  • 基于注解配置数据源
  • 项目结构
  • Computer.java
  • Memory.java
  • IntelCPU
  • Test.java
  • beans.xml
  • SpringEL使用实例
  • SpringEL方法
  • SpringEL构造
  • SpringEl操作符
  • SpringEl集合

springsecurity怎么验证下载文件接口 spring数据验证_Memory


springsecurity怎么验证下载文件接口 spring数据验证_Memory_02


数据验证主要分为前端验证与后端验证,都不应该省掉

Spring的验证更严格。

数据验证不应该被限定在web层去处理,它应该在任何需要做数据验证的地方做验证

基于以上考虑,Spring设计了一个既方便又可以在所有层使用的Validator接口

Spring验证的简单小例子

springsecurity怎么验证下载文件接口 spring数据验证_spring_03

springsecurity怎么验证下载文件接口 spring数据验证_Memory_04


springsecurity怎么验证下载文件接口 spring数据验证_Computer_05


Validator的使用

springsecurity怎么验证下载文件接口 spring数据验证_spring_06


springsecurity怎么验证下载文件接口 spring数据验证_Computer_07

springsecurity怎么验证下载文件接口 spring数据验证_Computer_08

SpringEL简介

SpringEL介绍

  • Spring表达式语言(简称SpEL)是一个支持查询和操作运行时对象导航图功能的强大的表达式语言
  • 它的语法类似于传统EL,但提供额外的功能,最出色的就是函数调用和简单字符串的模板函数
  • 虽然SpEL引擎作为Spring 组合里的表达式解析的基础 ,但它不直接依赖于Spring,可独立使用

支持运算并且可以调用方法,比 EL 功能更强大
可以实现Bean数据的动态注入

springsecurity怎么验证下载文件接口 spring数据验证_Computer_09

springsecurity怎么验证下载文件接口 spring数据验证_spring_10

第一行代码:EL表达式解析器

SpringEL使用

  • SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复杂表达式,存取对象属性、对象方法调用
  • SpEL表达式可以与XML或基于注解的配置元数据使用定义
  • 定义表达式的语法形式:#{<表达式字符串>}

OGNL:对象导航图语言,常用于strust框架。
JSF EL:java server face

基于xml配置数据源

springsecurity怎么验证下载文件接口 spring数据验证_Computer_11

项目结构

springsecurity怎么验证下载文件接口 spring数据验证_Computer_12

Computer.java

package com;

import javax.imageio.stream.MemoryCacheImageInputStream;

public class Computer {
	private String brand;//品牌
	private Memory memory;//内存
	private int count;
	
	
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public Memory getMemory() {
		return memory;
	}
	public void setMemory(Memory memory) {
		this.memory = memory;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}//内存大小

	public void show() {
		System.out.println("内存的大小为 "+count);
	}
	
}

IntelCPU.java

package com;

public class IntelCpu {

	public void run() {
		System.out.println("intel cpu is running");
	}
}

Memory.java

package com;

public class Memory {
	private int memCount;//内存大小
	


	public int getMemCount() {
		return memCount;
	}

	public void setMemCount(int memCount) {
		this.memCount = memCount;
	}
	
}

Test.java

package com;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

	public static void main(String[] args) {
		
//		//1. 启动Spring容器,参数是数据配置的文件名,
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
//		//2. 从容器中拿到对象
		Computer pc = (Computer)ctx.getBean("Computer");
		pc.show();
	}

}

beans.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
    <bean id="Memory" class="com.Memory">
    	<property name="memCount" value="1024"/>
    </bean>
    
    <bean id="Computer" class="com.Computer">
    	<property name="brand" value="Lenovo"/>
    	<property name="memory" ref="Memory"/>
    	<property name="count" value="#{Memory.memCount}"/>
    </bean>
    
</beans>

基于注解配置数据源

springsecurity怎么验证下载文件接口 spring数据验证_Computer_13

项目结构

springsecurity怎么验证下载文件接口 spring数据验证_Computer_14

Computer.java

package com;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("Computer")
public class Computer {
	private String brand;//品牌
	private Memory memory;//内存
	
	//动态赋值,#{}不可少,参数为类.属性
	//因为没有在Memory类上起别名,默认小写开头
	@Value("#{Memory.memCount}")
	private int count;//内存大小
	
	
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public Memory getMemory() {
		return memory;
	}
	public void setMemory(Memory memory) {
		this.memory = memory;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}//内存大小

	public void show() {
		System.out.println("内存的大小为 "+count);
	}
	
}

Memory.java

package com;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("Memory")
public class Memory {
	@Value("2048")
	private int memCount;
	
	public Memory() {
		System.out.println("这是Memory类打印的信息");
	}

	public int getMemCount() {
		return memCount;
	}

	public void setMemCount(int memCount) {
		this.memCount = memCount;
	}
	
}

IntelCPU

package com;

public class IntelCpu {

	public void run() {
		System.out.println("intel cpu is running");
	}
}

Test.java

package com;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

	public static void main(String[] args) {
		
//		//1. 启动Spring容器,参数是数据配置的文件名,
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
//		//2. 从容器中拿到对象
		Computer pc = (Computer)ctx.getBean("Computer");
		pc.show();
	}

}

beans.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
	<context:annotation-config></context:annotation-config>
	<!-- 扫描注解com包 -->
	<context:component-scan base-package="com"></context:component-scan>
</beans>

SpringEL使用实例

springsecurity怎么验证下载文件接口 spring数据验证_Computer_15

SpringEL方法

springsecurity怎么验证下载文件接口 spring数据验证_Computer_16


如果你有什么方法,可以直接拿来调用。

可以是系统方法,也可以是自定义方法

只有有返回值,并且返回值的类型与你属性一致就ok

package com;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("Computer")
public class Computer {
//系统已有方法
	@Value("#{'abc'.toUpperCase()}")
	private String brand;//品牌
	private Memory memory;//内存
//自定义方法
	@Value("#{MyMathUtil.area(2,3)}")
	private int area;
	//动态赋值,#{}不可少,参数为类.属性
	//因为没有在Memory类上起别名,默认小写开头
	@Value("#{Memory.memCount}")
	private int count;//内存大小
	
	
	
	//------------------------------------------	
	
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public Memory getMemory() {
		return memory;
	}
	public void setMemory(Memory memory) {
		this.memory = memory;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}//内存大小

	public void show() {
		System.out.println(brand);
		System.out.println(area);
		System.out.println("内存的大小为 "+count);
	}
	
}
package com;

import org.springframework.stereotype.Component;

@Component("MyMathUtil")
public class MathUtil {
	public int area(int l, int w) {
		return l*w;
	}
}

SpringEL构造

springsecurity怎么验证下载文件接口 spring数据验证_Computer_17

package com;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("Computer")
public class Computer {
	//参数的包名不可少
	@Value("#{new com.Memory()}")
	private Memory memory;//内存

}
package com;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("Memory")
public class Memory {
	@Value("2048")
	private int memCount;
	
	public Memory() {
		System.out.println("这是Memory类打印的信息");
	}

	public int getMemCount() {
		return memCount;
	}

	public void setMemCount(int memCount) {
		this.memCount = memCount;
	}
	
}

SpringEl操作符

springsecurity怎么验证下载文件接口 spring数据验证_Memory_18


springsecurity怎么验证下载文件接口 spring数据验证_Memory_19

查num2时候有可能会存在找不到属性的报错,那是因为num1是私有属性,没有公有方法,加上get方法就ok了

springsecurity怎么验证下载文件接口 spring数据验证_Memory_20

算数 > 关系 > 逻辑 > 赋值

SpringEl集合

springsecurity怎么验证下载文件接口 spring数据验证_Memory_21

springsecurity怎么验证下载文件接口 spring数据验证_spring_22


springsecurity怎么验证下载文件接口 spring数据验证_Memory_23

springsecurity怎么验证下载文件接口 spring数据验证_Computer_24

**

springsecurity怎么验证下载文件接口 spring数据验证_Memory_25


**

springsecurity怎么验证下载文件接口 spring数据验证_Memory_26


springsecurity怎么验证下载文件接口 spring数据验证_Computer_27