如何让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
相关产品推荐
相关产品推荐

