JAVA - record

Java 14 引入并在 Java 16 中正式稳定的 record 是一种新型类,用于定义不可变数据载体,简化“数据类”的定义。record 自动生成所有字段的 private final 声明、构造函数、getters 方法(字段名同名)、以及 toString()、equals() 和 hashCode() 方法。适用于仅需存储数据而无需大量样板代码(如构造函数、getter、toString 等)的场景。例如,创建一个 `Person` record 类,其中包含地址和年龄信息,可以轻松实现数据封装与访问,同时保持对象的不可变性。

liujie Published on 2025-04-21

浅谈Spring中的@EventListener和@TransactionalEventListener

文章讨论了在Spring框架中使用发布/订阅模式时遇到的问题及解决方案。初始示例展示了如何利用`@EventListener`实现用户注册后自动分配顾问的功能,但发现该方法与用户注册事务绑定在一起,导致业务逻辑未能完全解耦。为了解决这个问题,文章介绍了`@TransactionalEventListener`注解,它允许更灵活地控制事件监听器的执行时机,如事务提交后(默认)、回滚后或完成时。通过设置`Propagation.REQUIRES_NEW`开启新事务,可以确保即使原事务已提交,监听器中的数据操作仍能正常进行。此外,对于耗时较长的操作,还可以结合`@Async`注解异步处理。总之,`@TransactionalEventListener`提供了一种有效的方法来增强发布/订阅模式下的事务管理能力。

liujie Published on 2023-11-01
liujie Published on 2023-08-26

OpenFeign

OpenFeign是一种声明式、模板化的HTTP客户端,广泛应用于Spring Cloud中,使得开发者可以像调用本地方法一样访问远程服务。它通过与Ribbon或Eureka集成来实现负载均衡。文章提供了ServiceA和ServiceB之间的调用示例,包括Controller定义、启动类配置及Feign客户端的创建等步骤,并展示了如何使用配置文件设置超时时间和服务属性。此外,还介绍了OpenFeign的工作原理,即通过动态代理技术生成HTTP请求接口的实现类,以及其与Ribbon集成实现负载均衡的过程。最后,讨论了代理模式(特别是动态代理)的概念及其在Java中的两种主要实现方式:JDK动态代理和CGLIB代理,指出了各自的优缺点。

liujie Published on 2023-08-15

JDK1.8 HashMap源码分析

JDK1.8 HashMap源码分析 https://www.cnblogs.com/xiaoxi/p/7233201.html

liujie Published on 2023-05-12