import java.lang.reflect.Method; import java.util.Arrays; import java.util.strea...
一、事务 Redis的事务是使用MULTI-EXEC的命令组合,使用它可以提供两个重要的保证: 事务是一个被隔离的操作,事务中的方法都会被Redis进行序列化并按顺序执行,事务在执行的过程中不会被其他客户端发生的命令所打断...在spring中要使用同一个连接操作Redis命令的场景,这时可以使用Spring提供的SessionCallback接口。...可以看到,key1的值为字符串,对他进行自增,事务执行时出现错误,但key1的值为value1,key2的值为空,这说明在命令格式正确但执行出错的情况下,其之前之后的命令都会正常执行。...Redis参考了多线程中使用的CAS(比较与交换)去执行的。CAS原理会产生ABA问题 ? 上面表格显示的就是ABA问题。 仅仅记录一个旧值去比较是不足够的,还要通过其他方法避免ABA问题。...常见的做法是加入一个version字段,每操作一次version就加1,这样通过version就知道该字段有没有被修改过。
二、思路解析2.1 系统架构对每个需要加密的字段新增密文字段(对业务有侵入),修改数据库、mapper.xml以及DO对象,通过插件的方式把针对明文/密文字段的加解密进行收口。...自定义Executor对SELECT/UPDATE/INSERT/DELETE等操作的明文字段进行加密并设置到密文字段。...自定义插件ResultSetHandler负责针对查询结果进行解密,负责对SELECT等操作的密文字段进行解密并设置到明文字段。...(4)MapperFactoryBean也实现了FactoryBean接口,Spring在创建Bean时会调用FactoryBean.getObject()方法获取Bean,最终是通过mapperProxyFactory...",去掉"_COUNT"后我们再判断对应的方法上有没有注解就可以了。
《聊聊spring事务失效的12种场景,太坑了》《惊呆了,spring中竟然有12种定义bean的方法》中已经介绍过了,在这里就不过多讲解了。...@Value可以注入:成员变量、常量、方法、静态方法获取到的值,到相应的成员变量中。...一下子有没有豁然开朗的感觉,有了这些,我们可以通过@Value注解,实现更多的功能了,不仅仅限于注入系统属性。...7.4 逻辑运算 通过上面介绍的内容,我们可以获取到绝大多数类的变量和方法的值了。但有了这些值,还不够,我们能不能在EL表达式中加点逻辑?...8.2 #{} 主要用于通过spring的EL表达式,获取bean的属性,或者调用bean的某个方法。还有调用类的静态常量和静态方法。
Value来举例子,当我们通过@Value注解的方式将配置注入到字段时,大致步骤如下图所示: 取出@Value配置的key 根据@Value配置的key调用Environment的resolvePlaceholders...(String text)方法,解析占位符,找到配置文件中对应的值 调用PropertyEditor将对应的值转换成注入的属性字段类型,比如注入的字段类型是数字,那么就会将字符串转换成数字 在转换的过程中...,Spring会先调用PropertyEditor的setAsText方法将字符串传入,然后再调用getValue方法获取转换后的值。...不知道你有没有注意过,平时写接口的时候,前端传来的参数String类型的时间字符串无法通过Spring框架本身转换成Date类型,有部分原因就是前面提到的Spring没有相关的Converter实现 总的来说...> constructor, int parameterIndex):获取构造方法某个构造参数对应的ResolvableType 通过上面解释可以看出,对于一个类方法参数,方法返回值,字段等等都可以获取到对应的
7.2 bean的变量和方法 通过EL表达式,@Value注解已经可以注入bean了。既然能够拿到bean实例,接下来,可以再进一步。...@Value可以注入:成员变量、常量、方法、静态方法获取到的值,到相应的成员变量中。...一下子有没有豁然开朗的感觉,有了这些,我们可以通过@Value注解,实现更多的功能了,不仅仅限于注入系统属性。...7.4 逻辑运算 通过上面介绍的内容,我们可以获取到绝大多数类的变量和方法的值了。但有了这些值,还不够,我们能不能在EL表达式中加点逻辑?...8.2 #{} 主要用于通过spring的EL表达式,获取bean的属性,或者调用bean的某个方法。还有调用类的静态常量和静态方法。
使用@Value注解 @Value注解是最直接且常用的读取配置的方式。它可以将配置文件中的属性值注入到Spring管理的Bean的字段中。...的形式添加默认值 只能用于被Spring管理的Bean中使用,或Java配置@Configuration类 可以用于字段、构造函数参数、方法参数和方法上。...例如,配置文件中的student.name会自动映射到类字段name上。 如果配置文件中的属性名与类字段名不一致,可以使用@Value注解或通过setter方法来指定映射关系。...支持类型转换: @ConfigurationProperties支持自动类型转换,能够将配置文件中的字符串值转换为目标字段的类型。例如,将字符串转换为整数、布尔值等。...使用config的方法 } 6. 使用命令行参数 Spring Boot应用也支持通过命令行参数来传递配置信息。可以通过实现CommandLineRunner接口来访问命令行参数。
区别1: get重点在从服务器上获取资源,post重点在向服务器发送数据; 区别2: get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"...name=admin&password=admin,这个过程用户是可见的; post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的; 区别3:...较get安全性较高; 区别5: get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。...是二进制安全的,最大能存储 512MB。 Hash,散列,是一个键值(key=>value)对集合。string 类型的 field 和 value 的映射表,特别适合用于存储对象。...@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。
-- other properties --> 注解配置 要指定默认值,可以将@value注解放在字段、方法、方法或构造函数参数上。...大多数Spring用户不需要处理这个基础结构,只需要编写表达式字符串进行求值。...可以通过使用典型的Java编程语法来调用方法。...变量是通过在EvaluationContext实现上使用setVariable方法设置的。...[#this>10]").getValue(context); 函数 您可以通过注册可以在表达式字符串中调用的用户定义函数来扩展spel。该函数通过EvaluationContext注册。
这个正则字符串例子是通过单引号扩起来的一个字符串排版声明。接口Expression负责解析之前被定义的字符串表达式 SpEL支持很多功能特性,如调用方法,访问属性,调用构造函数。...作为方法调用的一个例子,我们调用字符串的“CONCAT”的方法。...-- other properties --> 8.4.2 基于注解的配置 @ Value注解可以放在字段,方法和方法/构造 参数里,以指定默认值。...[value<27]").getValue(); 除了返回所有选定的元素,也可以用来获取 第一或最后一个值。...“random number is”与 计算表达式的#{}定界符获取的结果,在此情况下的结果 中调用一个随机()方法。
设置字段类型 8.4. 指定不持久化特定字段 8.5. 声明大字段 8.6. 创建枚举类型的字段 8.7. 增加审计功能 8.8. 删除/修改数据 8.9. 关联关系 9....处理常见的 HTTP 请求类型 5 种常见的请求类型: GET :请求从服务器获取特定资源。举个例子:GET /users(获取所有学生) POST :在服务器上创建一个新的资源。...卡洛·罗韦利用诗意的文字,邀请我们思考这一亘古难题——时间的本质。 - name: 了不起的我 description: 如何养成一个新习惯?如何让心智变得更成熟?...如下图所示(通过 idea 插件—Maven Helper 生成): 注:如果版本中的 spring-boot-starter-web 依赖中没有 hibernate-validator 包(如2.3.11...一些常用的字段验证的注解 @NotEmpty 被注释的字符串的不能为 null 也不能为空 @NotBlank 被注释的字符串非 null,并且必须包含一个非空白字符 @Null 被注释的元素必须为 null
,特别是方法调用和基本字符串模板函数。...3.构造上下文:准备比如变量定义等等表达式需要的上下文数据。 4.求值:通过 Expression 接口的 getValue 方法根据上下文获得表达式值。...方法用于获取表达式值,提供 setValue 方法用于设置对象值。...;使用类类型表达式还可以进行访问类静态方法及类静态字段。...变量定义以及引用:变量定义通过 EvaluationContext 接口的 setVariable(variableName, value) 方法定义;在表达式中使用"#variableName"引用;
背景 Spring 框架,广泛应用于 JAVA 企业级开发中,包含了一套实用的字段校验机制: Spring Validation。...本文将介绍 Spring Validation 的使用方法,包括基础注解的应用以及进阶使用技巧。...>[] value() default {}; } @Valid // 用于方法,字段,构造函数,参数,以及泛型类型 @Target({ METHOD, FIELD, CONSTRUCTOR,...,根据方法参数上的注解,决定是否进行字段校验:当存在 @Validated 或以 Valid 开头的注解时,进行校验。...>[] groups() default {}; } 实现对应的校验器,主要校验逻辑在 isValid 方法:获取集合中指定字段,并组装为 set,比较 set 和集合的长度,以判断集合中指定字段是否存在重复
处理常见的 HTTP 请求类型 5 种常见的请求类型: GET :请求从服务器获取特定资源。举个例子:GET /users(获取所有学生) POST :在服务器上创建一个新的资源。...系统会使用HttpMessageConverter或者自定义的HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。...卡洛·罗韦利用诗意的文字,邀请我们思考这一亘古难题——时间的本质。 - name: 了不起的我 description: 如何养成一个新习惯?如何让心智变得更成熟?...一些常用的字段验证的注解 @NotEmpty 被注释的字符串的不能为 null 也不能为空 @NotBlank 被注释的字符串非 null,并且必须包含一个非空白字符 @Null 被注释的元素必须为 null...创建枚举类型的字段 可以使用枚举类型的字段,不过枚举字段要用@Enumerated注解修饰。
️ SpringBoot中MongoDB的高级用法不知道大家在工作项目中有没有使用MongoDB,在哪些场景中使用。...userId;// 将userId字段作为主键, 存储到Mongodb中的字段名为_id@Field:该注解用于指定Document中字段的名称,默认情况下,Spring会将Java对象的字段的名作为...但是需要注意的是,MongoTemplate中提供的触发方法只有7个,如果执行的是aggregate,bulk等操作,无法通过监听器来记录最终执行的操作语句。...) 方法中进行的,默认的行为是从查询到的Document中获取_class 字段的值,然后和find(Query query, Class entityClass) 中的entityClass...>) null);}}所以为了避免普通的字符串被转为ObjectId,我们需要重写convertId方法。
Spring EL允许开发者通过表达式将数据装配到属性或构造函数中,调用JDK中提供的静态常量,获取外部Properties文件中的配置,甚至可以对不同Bean的字段进行计算再进行赋值。...强大的功能:Spring EL支持各种操作符和函数,包括算术、逻辑、关系、条件、集合和字符串操作等。...函数用于获取类类型,然后你可以调用其静态方法。...自定义函数通过实现特定的接口或使用Spring的@Value和MethodInvokingFactoryBean来定义。 一旦注册了自定义函数,你就可以在EL表达式中像调用内置函数一样调用它们。...模板文字 在某些情况下,你可能希望在EL表达式中使用模板文字,这些模板文字允许你插入表达式的值。
AOP方式导出Excel也支持Web端通过请求参数控制Excel的输出格式,这种方式要求服务方法定义与@ExcelSheet注解中对应的方法名同名的参数,切面执行时会自动将这些参数注入到@ExcelSheet...请求参数定义的顺序也没有要求,但参数名必须与@ExcelSheet中对应的方法名一致才有效,类型也必须一致,对于枚举类型的参数,类型为String,切面执行时会自动将枚举变量名字符串转为枚举类型变量。...的Spring AOP(切面)实现提供了在服务方法指定原始数据类型的机制,以允许服务方法通知切面执行时原始的数据类型是什么,这样切面执行时就可以从原始的数据类型中获取原数据类型中@ExcelColumn...#setBeanClass 方法告诉 ExcelHelperAround对象数据记录的原始的数据类型, * 这样ExcelHelperAround就可以通过该类型获取 JSON 字段的Excel配置参数...,此字段用于给前端提供默认的输出字段及顺序 getParameterArgName getParameter Spring Controller 服务方法中获取excel导出参数的开关参数名 exportFileNameArgName
但是需要注意的是,MongoTemplate中提供的触发方法只有7个,如果执行的是aggregate,bulk等操作,无法通过监听器来记录最终执行的操作语句。...) 方法中进行的,默认的行为是从查询到的Document中获取_class 字段的值,然后和find(Query query, Class entityClass) 中的entityClass...自定义_id转换器这是一个坑,假如User这个Collection中,使用userId作为_id 字段的值,这是一个字符串。...会使用ObjectId对象作为_id 的值,但是因为MongoDB中_id 字段的类型是普通的字符串,并非是ObjectId,所以就会出现查询不到的情况。...>) null);}}所以为了避免普通的字符串被转为ObjectId,我们需要重写convertId方法。
有没有统一的封装呢? 其实Spring给我们提供了Assert类,它表示断言。 1.1 断言参数是否为空 断言参数是否空,如果不满足条件,则直接抛异常。...其实Spring提供了工具类StringUtils,对JDK中一些字符串的操作进行了扩展。 2.1 判空 StringUtils类其实有个isEmpty()方法判断,不过已经被废弃了。...6.1 拷贝对象的属性 曾几何时,你有没有这样的需求:把某个对象中的所有属性,都拷贝到另外一个对象中。这时就能使用BeanUtils的copyProperties方法。...7.1 获取方法 如果你想获取某个类的某个方法,可以使用ReflectionUtils类的findMethod方法。...例如: Method method = ReflectionUtils.findMethod(User.class, "getId"); 7.2 获取字段 如果你想获取某个类的某个字段,可以使用ReflectionUtils
领取专属 10元无门槛券
手把手带您无忧上云