
Spring & SpringBoot等框架技术
文章平均质量分 64
本专栏主要介绍Spring、SpringBoot、Spring Cloud相关技术学习和实践总结。
Andya_net
公众号:CodingTechWork
觉得为时已晚的时候,恰恰是最早的时候。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SpringBoot | 越权和数据权限控制的一种实现方案
首先,我们需要定义一个自定义的注解,这个注解会包含操作类型(CRUD)、资产ID和资产名称作为入参。@Target(ElementType.METHOD) // 该注解作用于方法@Retention(RetentionPolicy.RUNTIME) // 运行时生效// 操作类型,默认为 READ// 资产 ID// 资产名称通过以上的实现,我们使用了自定义注解、切面编程和用户权限服务的组合来对方法进行权限控制,确保只读用户无法进行修改操作,同时判断其他用户是否有权限访问特定的资产。原创 2025-06-24 18:35:53 · 525 阅读 · 0 评论 -
Spring | JDK 动态代理与 CGLIB 代理:原理、区别与实战对比
本文对比了Java中两种动态代理技术——JDK动态代理和CGLIB代理。JDK动态代理基于反射机制,要求目标类必须实现接口,使用Proxy类和InvocationHandler创建代理。CGLIB通过字节码生成目标类的子类,无需接口但无法代理final类,使用Enhancer和MethodInterceptor实现。性能上,JDK代理初始化快,适合方法调用少的场景;CGLIB调用性能更好,适合方法调用多的情况。建议根据实际需求选择:有接口优先用JDK代理,无接口或需代理非接口方法则用CGLIB。原创 2025-06-11 14:09:28 · 790 阅读 · 0 评论 -
Spring | 深入解析 Spring AOP 中的AopProxyUtils.ultimateTargetClass()解决代理对象注解获取问题
摘要本文探讨了Spring AOP代理对象无法获取目标类注解的问题及解决方案。当使用JDK动态代理或CGLIB代理时,直接通过代理对象获取类注解可能失效。通过分析问题现象,文章提出使用AopProxyUtils.ultimateTargetClass()方法穿透代理层,获取最终目标类类对象,从而正确读取类级别注解。该方法通过递归检查代理链实现目标类定位,并结合源码分析其实现原理。实测验证该方案可有效解决代理场景下的注解获取问题,为Spring AOP开发提供了实用技巧。原创 2025-06-11 14:03:26 · 1113 阅读 · 0 评论 -
SpringBoot | 构建客户树及其关联关系的设计思路和实践Demo
客户树是一种层级结构,用于表示客户之间的上下级关系。每个客户可以有多个子客户,而每个子客户又可以有自己的子客户,形成一个树状结构。企业与子公司:表示企业集团的层级结构。经销商与下级经销商:表示销售渠道的层级关系。客户与联系人:表示客户内部的组织架构。层级性:每个客户都有一个层级,顶级客户为第1层,其子客户为第2层,依此类推。递归性:客户树的结构是递归的,每个子客户可以有自己的子客户。关联性:客户之间通过父子关系关联。原创 2025-04-24 22:53:16 · 1236 阅读 · 0 评论 -
Java | 深拷贝与浅拷贝工具类解析和自定义实现
浅拷贝:只复制对象的直接字段,对于引用类型字段,复制的是引用而不是对象本身。深拷贝:递归复制对象的所有字段,包括引用类型字段所指向的对象。原创 2025-04-23 23:22:27 · 1106 阅读 · 0 评论 -
Java | 基于自定义注解与AOP切面实现数据权限管控的思路和实践
在企业级应用中,数据权限控制是一个常见的需求。本文将通过一个完整的示例,展示如何使用自定义注解和AOP切面在Spring Boot项目中实现数据权限管控,以商品实例列表查询为例,根据用户角色动态过滤数据。同时,我们将提供完整的表结构和数据插入脚本,以便更好地理解和测试。原创 2025-04-23 23:09:26 · 684 阅读 · 0 评论 -
Spring | 基于 Spring Pipeline管道、上下文与路由表实现业务流程串联
管道模式是一种行为设计模式,它将复杂的任务分解为一系列独立的处理步骤(Stage),每个步骤被称为一个阶段。这些阶段通过管道(Pipeline)连接在一起,数据依次通过各个阶段进行处理,最终完成整个任务。低耦合:每个阶段都是独立的,可以独立开发和测试,减少了模块之间的依赖关系。高扩展性:可以方便地添加或删除阶段,而不需要修改其他代码。易于维护:每个阶段的职责单一,代码清晰易懂,便于维护和调试。首先,我们定义一个通用的阶段接口Stage,它包含一个方法process,用于处理数据。原创 2025-04-17 09:05:09 · 741 阅读 · 0 评论 -
Spring | Spring、Spring MVC 和 Spring Boot 的区别
Spring 框架是一个开源的 Java 平台,为开发 Java 应用程序提供了全面的基础设施支持。它包含了许多模块,如依赖注入(DI)、面向切面编程(AOP)、数据访问(JDBC、ORM)、事务管理、Web 开发等。Spring MVC 是 Spring 框架的一个模块,专门用于构建 Web 应用程序。它是一个表现层框架,用于处理 HTTP 请求和响应。Spring Boot 是基于 Spring 框架的扩展,旨在简化 Spring 应用的初始搭建和开发过程。原创 2025-04-03 09:38:26 · 1146 阅读 · 0 评论 -
Java | 基于 ThreadLocal 实现多客户端访问设备的 REST 请求下发
ThreadLocal 是 Java 提供的一种线程局部变量存储机制。它为每个线程提供了一个独立的变量副本,使得每个线程都可以独立地访问和修改自己的变量副本,而不会相互干扰。这种机制非常适合处理多线程环境下的上下文信息传递问题。创建一个 Device 类,用于存储设备的 IP 和端口信息。return ip;本文介绍了如何使用 ThreadLocal 实现多客户端访问设备的 REST 请求下发。原创 2025-03-28 09:58:49 · 607 阅读 · 0 评论 -
Redis | 基于 Redis 实现机器列表 Token 缓存的 Java 实现
通过引入分布式锁机制,我们成功解决了在 Kubernetes Pod 部署环境下分布式刷新缓存 Token 的问题。使用 Redis 实现的分布式锁确保了同一时间只有一个 Pod 能够执行 Token 刷新任务,避免了重复执行的问题。这种机制不仅适用于 Token 刷新,还可以扩展到其他需要分布式定时任务的场景。原创 2025-03-28 09:14:55 · 962 阅读 · 0 评论 -
SpringBoot | 解决 Feign 客户端方法参数过多的问题:Method has too many Body parameters
通过明确地使用和注解,我们可以避免 Feign 客户端方法参数过多的问题。此外,开启 Feign 日志可以帮助我们更好地调试和排查问题。在实际开发中,我们还需要注意 Feign 客户端方法签名与服务端接口的一致性,以确保通信的正确性。原创 2025-03-20 15:49:23 · 713 阅读 · 0 评论 -
Java | DTO 与 Entity 之间拷贝转换的几种方法
如果项目中对性能要求较高,且字段映射规则较为固定,可以自定义工具类来实现字段拷贝。在实际开发中,选择哪种方式取决于项目需求和团队的技术栈。如果项目对性能要求较高,推荐使用MapStruct或自定义工具类;如果项目对开发效率要求较高,推荐使用或BeanUtils。原创 2025-02-08 08:58:16 · 946 阅读 · 0 评论 -
Java | CompletableFuture详解
是Java 8引入的一个非常强大的类,属于包。它是用于异步编程的一个工具,可以帮助我们更方便地处理并发任务。与传统的线程池或Future对比,提供了更多灵活性和组合功能,使得异步编程更加简单和易于维护。主要用于异步操作和组合多个异步任务。它可以通过执行非阻塞的操作来避免阻塞主线程,从而提高程序的性能和响应速度。实现了Future和接口。需要编排多个异步操作的场景实现非阻塞的响应式系统需要精细控制任务执行顺序和依赖关系构建高并发、低延迟的服务。原创 2025-02-03 21:27:50 · 1011 阅读 · 0 评论 -
SpringBoot | 基于MyBatis-Plus实现Lambda Query查询
对于一些需要自定义SQL的场景,可以直接使用@Select或@Update注解来编写SQL。提供了极为丰富的查询功能,通过简洁的API和灵活的查询构造器,可以非常方便地进行数据库查询操作。普通查询:通过方法可以快速进行数据查询。Lambda查询:通过构建条件查询,避免硬编码字段名,提高代码可维护性。和提供了多种条件构建方式,支持链式调用。提供了内置的分页支持,可以轻松进行分页查询。聚合查询:支持常见的聚合操作,如等。原创 2025-01-09 09:02:41 · 1862 阅读 · 0 评论 -
SpringBoot | 基于 MyBatis 的分页与模糊查询的开发模板
SpringBoot|基于MyBatis的分页与模糊查询的开发模板原创 2025-01-07 22:15:03 · 1034 阅读 · 0 评论 -
SpringBoot | @Autowired 和 @Resource 的区别及原理分析
Autowired是Spring框架提供的注解,旨在实现自动注入依赖。它通常用于自动装配Bean时,通过Spring容器找到匹配的Bean,并将其注入到标注了@Autowired的字段、构造方法或Setter方法中。@Resource是Java的标准注解(JSR-250规范),在Spring中也得到了支持。它的作用是实现依赖注入,主要通过名称来进行自动装配,如果找不到与名称匹配的Bean,则通过类型来进行匹配。原创 2025-01-07 21:30:30 · 1176 阅读 · 0 评论 -
JAVA | 通过自定义注解与AOP防止接口重复提交
为了简化防重逻辑的实现,我们首先定义了一个名为@Resubmit的自定义注解,它用于标记那些需要防止重复调用的方法。keyPrefix():指定生成防重Key的前缀规则。key():允许开发者自定义Key值,或者从请求参数中动态获取。limitation():设定两次相同请求之间最短时间间隔,单位为秒。timeout():设置最长限制时间,以避免由于系统原因导致无法再次调用的问题,默认300秒。/**原创 2025-01-07 14:14:10 · 1514 阅读 · 0 评论 -
SpringBoot | 使用Apache POI库读取Excel文件介绍
在开发过程中会有一些需要读取excel数据进行数据处理,本文主要介绍读取excel的模板;原创 2025-01-05 15:04:14 · 515 阅读 · 0 评论 -
Java | 数据一致性校验遇到的时间序列化格式不一致问题如何解决?
在开发过程中,有数据一致性校验需求。方法进行时间格式的统一准换。进行序列化时,我们可以使用。原创 2023-11-30 22:32:27 · 496 阅读 · 0 评论 -
SpringBoot | @EnableAutoConfiguration注解介绍
SpringBoot | @EnableAutoConfiguration注解介绍。原创 2023-11-12 17:50:17 · 287 阅读 · 0 评论 -
SpringBoot |引用外部jar包中的类方式
在本工程中引入外部jar包的类进行反射获取,如何获取?原创 2023-11-12 17:39:05 · 503 阅读 · 0 评论 -
SpringBoot——SpringBoot服务启动过程源码详解剖析!
SpringBoot服务启动流程源码剖析!不服来战!原创 2023-06-13 14:49:54 · 1786 阅读 · 0 评论 -
RPC——RPC协议介绍及原理详解
RPC(Remote Procedure Call Protocol) 远程过程调用协议。RPC是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。RPC主要作用就是不同的服务间方法调用就像本地调用一样便捷。序列化:将消息对象转换为二进制流。反序列化:将二进制流转换为消息对象。原创 2023-06-11 12:10:52 · 38790 阅读 · 0 评论 -
SpringBoot——MyBatis-Plus源码分析及开发实践详解
在上一家公司一直使用,它是对基于JPA的数据访问层的增强支持,底层使用框架,支持使用原生L或查询语言。是基于的,它把代码和分离,即在代码和之间增加了新的一层,从而间接操作,大家可能觉得这个学习成本比较高,但其实也还好,都用不到文件等。 而在新的公司,使用的是,面向基于的模式,复杂的需要通过写文件来操作可能更直观友好,当结合就原地起飞了。本文主要总结使用的一些实践经验及源码分析。 是的增强工具,可以简化开发,提高我们的开发效率。原创 2023-04-25 14:22:56 · 1758 阅读 · 0 评论 -
SpringBoot——邮箱地址列表过滤出合法地址列表
SpringBoot——邮箱地址列表过滤出合法地址列表。原创 2023-04-23 14:38:09 · 285 阅读 · 1 评论 -
SpringBoot——@ConditionalOnProperty和@ConditionalOnProperty注解的详解和使用
在SpringBoot中可以通过该注解来控制是否生效。同时,我们可以通过该注解判断一个property属性,是否符合我们设定的配置值,符合则使该注解修饰的类或方法生效,否则不生效。该注解是的扩展注解。上述讲解的只能精准的匹配中的值进行控制,无法根据更多的属性值进行匹配(即使它有数组的value值,也只能配合进行与校验)我们可以通过注解进行其他属性值的表达式来校验。是执行Spel表达式,根据返回的布尔值判断是否符合条件。本来只想用用,用完更爽一些!原创 2023-04-17 16:27:25 · 1909 阅读 · 0 评论 -
SpringBoot——单元测试实践总结
mock是指在测试过程中,创建一个虚拟的对象来模拟指定对象的行为。PowerMock时一个Java单测模拟的框架,扩展了EasyMock和Mockito框架。PowerMock通过提供定制的类以及一些字节码篡改技巧进行模拟。PowerMock可模拟静态方法、私有方法、构造方法、final方法等。PowerMock支持JUnit和TestNG。原创 2023-04-16 20:06:07 · 2351 阅读 · 4 评论 -
SpringBoot——结合nacos实现动态刷新自定义线程池
1. 实现自定义线程池2. 实现线程池参数动态刷新原创 2023-04-07 17:31:11 · 407 阅读 · 0 评论 -
SpringBoot—枚举类属性值是否包含判断
在一些校验中,需判断一个值是否包含在枚举属性值中,如下总结枚举属性值包含判断功能。原创 2023-04-03 19:11:05 · 745 阅读 · 0 评论 -
SpringBoot—根据起始时间和终止时间获取ES索引名称范围
根据ES的起始时间字段,查询索引名称范围。前提,索引名称也是按照年月来命名,如。原创 2023-04-03 19:29:03 · 631 阅读 · 0 评论 -
SpringBoot—bean工具类封装
在Java开发代码中,经常会有一些对象Bean转换的需求,如下进行模板总结。原创 2023-04-03 19:05:52 · 325 阅读 · 0 评论 -
SpringBoot——校验参数是否包含在枚举属性值中
在一些枚举类调用中,我们需要对一些枚举的属性值做包含关系的判断,看是否匹配。通过反射机制获取对应方法,再获取对应的枚举属性值。下面是示例实现。原创 2023-03-08 11:09:18 · 1113 阅读 · 0 评论 -
SpringBoot——启动服务时获取所有controller层的接口url列表
在服务启动时,获取服务的所有controller层接口url列表,通过实现服务启动时的操作。原创 2023-03-07 13:52:17 · 3313 阅读 · 0 评论 -
SpringBoot——Service单元测试(包含mybatis、mapper、私有方法等)
在写单元测试时,免不了遇到私有方法、数据库等一些操作,此时就需要一些mock处理。原创 2023-01-09 16:26:56 · 1910 阅读 · 0 评论 -
SpringBoot——单元测试error: can not execute. because can not find cache of TableInfo for entity!
在测试类中,添加mybatis的初始化构建。原创 2023-01-05 17:07:16 · 3979 阅读 · 4 评论 -
SpringBoot——controller单元测试无需启动上下文的方式
本次通过单独类进行单元测试,无需启动上下文。原创 2023-01-05 09:28:31 · 963 阅读 · 0 评论 -
SpringBoot——自定义拦截器校验认证前端token
解决横向越权的token校验拦截器。原创 2022-12-14 13:58:03 · 730 阅读 · 0 评论 -
Spring—拦截器和过滤器介绍
拦截器和过滤器的区别原创 2022-10-21 14:22:48 · 852 阅读 · 0 评论 -
SpringBoot——使用powermock进行静态方法的单元测试
单元测试:对静态方法引用后做单测原创 2022-08-24 14:21:19 · 1430 阅读 · 0 评论 -
SpringBoot—启动报错Exception in thread “main“ java.lang.ClassNotFoundException
问题解决方案pom.xml中查看中的内是否未加Application类。原创 2021-12-27 13:40:50 · 1264 阅读 · 0 评论