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

如何自定义Lombok @SuperBuilder的build方法以自动执行后续逻辑?

自定义Lombok @SuperBuilder的build方法

因为@SuperBuilder生成的builder是泛型抽象类,和@Builder的普通静态内部类结构不同,直接覆盖build()方法会失效。可以通过以下几种方式实现自动调用方法的需求:

方法1:重写泛型builder的build方法

@SuperBuilder(buildMethodName = "internalBuild")
public class Foo {
    private String name;
    private int age;

    // 需要自动调用的方法
    public Foo someMethod() {
        // 这里编写你的业务逻辑,比如参数校验、初始化操作
        this.name = this.name != null ? this.name.toUpperCase() : null;
        return this;
    }

    // 继承Lombok生成的泛型Builder类,重写build方法
    public static class FooBuilderImpl extends FooBuilder<Foo, FooBuilderImpl> {
        @Override
        public Foo build() {
            return internalBuild().someMethod();
        }
    }
}

说明:

  • 通过buildMethodName = "internalBuild"让Lombok把原始的构建方法重命名,避免和自定义的build()冲突
  • 继承自动生成的FooBuilder泛型类,泛型参数指定当前实体类Foo和builder自身FooBuilderImpl
  • 重写build()方法,先调用Lombok生成的internalBuild()创建实例,再自动执行someMethod()

方法2:在构造函数中直接调用

如果不需要依赖builder的特殊逻辑,可以直接在类的构造函数中调用目标方法,这样无论通过builder还是其他方式创建实例,都会自动执行:

@SuperBuilder
public class Foo {
    private String name;
    private int age;

    // 手动编写构造函数,调用目标方法
    private Foo(FooBuilder<?, ?> builder) {
        this.name = builder.name;
        this.age = builder.age;
        someMethod();
    }

    public void someMethod() {
        this.name = this.name != null ? this.name.toUpperCase() : null;
    }
}

注意:如果父类也使用了@SuperBuilder,需要确保构造函数的调用链正确传递参数。

方法3:Spring环境下用@PostConstruct

如果你的类是Spring Bean,可以直接给目标方法加上@PostConstruct注解,Spring初始化Bean时会自动执行该方法,无需修改builder逻辑:

@SuperBuilder
@Component
public class Foo {
    private String name;
    private int age;

    @PostConstruct
    public void someMethod() {
        this.name = this.name != null ? this.name.toUpperCase() : null;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:50:21