
Spring全家桶
文章平均质量分 54
Spring系列博文
流沙QS
秉承开源,分享快乐;并非造火箭,只为更快搬砖。
展开
-
JDK动态代理中如何执行代理接口中的default方法?
试想一下,有很多场景下,我们有特殊要求,希望在JDK动态代理的接口中希望有自己自定义的逻辑,而后再执行代理方法。// 此处可以检查 msg,以及一些默认赋值// 再调用执行方法抽象方法send()的参数 msg,我们希望设置一些公共的参数,但是在每一处调用时都设置一次,就显得重复啰嗦。因此,在checkThenSend()中就可以统一设置值,然后再调用 send()方法。本文就是如何实现从而达到目的。原创 2024-11-13 09:53:26 · 329 阅读 · 0 评论 -
基于Spring事务模板编程式事务小工具
基于Spring事务,官方推荐使用@Transactional注解的声明式事务,使用便捷,无需关心底层实现,只需关心注解中的参数含义及使用规则。然而在很多场景下(特别是复杂的业务逻辑、更甚在子线程、多线程中),往往声明式事务会出现意想不到的结果。这时候针对特定场景,这时编程式事务更加得心应手。原创 2024-11-01 10:58:22 · 218 阅读 · 0 评论 -
简易版接口防重实现(分布式锁)
接口防重亦是分布式锁的一种特殊形式。市面上最典型的就是大名鼎鼎的Redisson实现的分布式锁。但使用Redisson仅仅作为一个锁,未免大材小用,同时也显得臃肿。因此,有必要实现一个类似功能且安全高效的、简单的分布式锁。利用Spring提供的切面技术,SpringEl表达式语言,JDK自定义注解,Redis及Lua等。2.定义切面逻辑处理3.原理说明利用Redis Client执行Lua的原子特性,在判断Redis中是否存在当前的Key,如果存在,则抛出异常,表示当前请求的数据已被占用原创 2024-06-11 10:42:03 · 497 阅读 · 0 评论 -
如何调用Java接口中默认方法?
那么就会陷入无限循环中。因此,只能采取其他方式,比如以上获取的是接口的默认实现方法;当然,如果是接口的抽象方法,那么就可以在代理方法java.lang.reflect.InvocationHandler#invoke实现自己的逻辑,比如调用外部接口的处理逻辑等等。原因很简单,JDK动态代理接口的对象本身就是java.lang.reflect.InvocationHandler,如果再调用。那么,如果该接口我们不想有实现类,又想要调用。注意:接口没有实现,不能直接通过反射调用!,从而可动态调用方法。原创 2024-04-30 12:05:59 · 1189 阅读 · 2 评论 -
SpringBoot配置Redisson客户端
Redisson,最出名的莫过于扩展了Redis应有的功能,提供了简而易用的分布式锁。更多详细介绍不作赘述。原创 2024-04-07 11:23:01 · 1230 阅读 · 1 评论 -
SpringBoot响应式RedisClient配置
大多数场景,默认配置的Redis客户端不满足业务场景,根源在于Redis key、value 序列化反序列化问题。因此,有必要配置自定义的客户端来满足需求。原创 2024-04-07 10:45:17 · 586 阅读 · 0 评论 -
如何通过Spring提供的EL表达式执行bean的属性或方法?
如何通过Spring提供的EL表达式执行bean的属性或方法?原创 2024-04-03 17:36:47 · 871 阅读 · 1 评论 -
如何根据nacos config动态刷新实时做你要想要做的事?
原理:利用Spring提供的监听器,侦听nacos发布事件(SpringCloud提供):org.springframework.cloud.endpoint.event.RefreshEvent即可完成。比如:根据配置动态修改bean等。原创 2024-04-03 16:55:09 · 305 阅读 · 0 评论 -
如何动态往Spring容器注册/移除bean?
第二问:使用org.springframework.beans.factory.support.BeanDefinitionBuilder来构建BeanDefinition。第一问:可注入bean工厂org.springframework.beans.factory.support.DefaultListableBeanFactory得到;几个关键点:如何拿到Spring上下文来创建bean或移除bean?如何准备构建bean所需的BeanDefinition?本文不谈原理,直接上实战。原创 2024-04-03 16:47:21 · 662 阅读 · 0 评论 -
SpringBoot v2.7.x+ 整合Swagger3入坑记?
在启动类增加注解开起swagger:@springfox.documentation.oas.annotations.EnableOpenApi。原因是:主要出现在Spring Boot 2.6及以后,只要是Spring Boot 2.6引入的新PathPatternParser导致的。二、集成Swagger Java Config。Swagger版本:3.0.0。但尚未解决,issue已关闭。想尝鲜,坑也多,一起入个坑!若还是不能解决,添加如下配置。1.Path匹配策略切换回。配置完重启服务问题解决!原创 2023-08-29 16:02:54 · 3793 阅读 · 1 评论 -
SpringBoot 实现跨域的六种方式
【代码】SpringBoot 实现跨域的六种方式。原创 2023-07-31 22:52:30 · 4457 阅读 · 0 评论 -
SpringBoot Jackson 日期格式化统一配置
注:用到 cn.hutool.core.date.DatePattern#NORM_DATE_PATTERN,即日期格式化字符串:yyyy-MM-dd。至此,无需再使用 繁琐的 注解 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 进行大量重复性的工作了。该配置方式仅支持 Date 类型的日期格式化,不支持LocalDate 及 LocalDateTime 的格式化。原创 2023-07-31 22:31:51 · 1700 阅读 · 0 评论 -
Spring全局异常处理你可能不知道的那些事儿(细而全)
此部分可以借助Spring提供的全局异常处理机制来处理如Filter中的异常,此部分异常无法到达Controller层,因此Spring提供的全局异常处理机制无法捕获。此部分处理有两种方式:网上大部分处理的方式为,在Filter中抛出异常的地方,重定向到指定的一个Controller层去,这样就可以借助Spring的全局异常处理器()来进行处理,此处不再赘述。主要谈的是第二种,即实现接口的异常处理。原创 2022-09-12 19:24:50 · 809 阅读 · 4 评论 -
springboot+vue+element-ui下载excel模板
本代码基于Vue项目(此处暂不做深入,仅对文件流下载做一个记录)HTML部分 <div><el-button@click="download">下载</el-button><div> javascript部分 download(){let_this=this;letfileName=`单位客户导入模板_${newDate().getTime()}.xlsx`;axios({me...原创 2022-02-17 12:20:37 · 1088 阅读 · 0 评论