You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Lombok为自动生成的Setter方法追加自定义代码?

如何让Lombok自动生成的Setter方法追加自定义代码?

嘿,这个需求完全可以搞定!针对你给出的Foo类场景,我给你两种实用的方案,分别适配不同版本的Lombok:

方案1:使用Lombok 1.18.16+的@OnSet注解(推荐)

从Lombok 1.18.16版本开始,官方专门推出了@OnSet注解,用来在属性被设置时触发指定方法的调用。这个方法简单直接,完全符合你的需求。

给单个属性的Setter添加自定义逻辑

如果只需要给特定属性的Setter追加update()调用,直接在属性上同时标注@Setter和@OnSet即可:

import lombok.Setter;
import lombok.OnSet;

public class Foo {
    @Setter
    @OnSet(method = "update")
    private int a;
    
    @Setter
    @OnSet(method = "update")
    private int b;
    
    private void update() { /* ... */ }
}

给所有属性的Setter统一添加自定义逻辑

如果希望类中所有用@Setter生成的Setter方法都自动调用update(),直接把@OnSet标注在类上就行:

import lombok.Setter;
import lombok.OnSet;

@Setter
@OnSet(method = "update")
public class Foo {
    private int a;
    private int b;
    
    private void update() { /* ... */ }
}

不管哪种写法,Lombok最终生成的Setter代码都会和你期望的完全一致:

public void setA(int a) {
    this.a = a;
    update();
}

public void setB(int b) {
    this.b = b;
    update();
}

方案2:自定义Lombok扩展(适用于旧版本Lombok)

如果你的Lombok版本低于1.18.16,没法使用@OnSet,那可以通过编写自定义的Lombok注解处理器来实现。不过这个方法相对复杂,需要你了解Java注解处理器的基本原理,大致步骤如下:

  • 自定义一个注解(比如@SetterWithUpdate),用来标记需要追加逻辑的属性或类
  • 编写Lombok的Handler类,继承BaseHandler,在生成Setter方法的代码后,手动追加调用update()的语句
  • 将自定义处理器打包成jar包,添加到项目依赖中

不过除非你没法升级Lombok版本,否则优先推荐方案1,毕竟官方提供的功能更稳定省心。

额外小提示

  • 确保update()方法的访问权限设为private或package-private,避免被外部代码误调用
  • 如果需要把设置的属性值传递给update(),可以给@OnSet加上parameter = true属性,比如@OnSet(method = "update", parameter = true),此时update()需要定义为private void update(int value),Lombok会自动把当前设置的属性值传进去

内容的提问来源于stack exchange,提问作者Duke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:57:48