Lombok 与默认构造函数

use*_*157 1 java spring lombok

我有一堂这样的课:

@Service("aSpringService")
@RequiredArgsConstructor(onConstructor = @__({@Autowired}))
public class ServiceImpl implements Service {
    @NonNull
    private final Member1 m1;

    @NonNull
    private final Member2 m2;

    @NonNull
    private final Member3 m3;

}
Run Code Online (Sandbox Code Playgroud)

构造函数将由 Lombok 创建,并且在运行时,sp​​ring 会将成员注入到构造函数中。现在我需要一个设置方法,但被 lombok 困住了。看来,Lombok 不能称为自写的东西。

我想要的是

我想要一个 Lombok-Annotation 的新参数,例如useDefaultConstructor. 当此参数存在时,自动代码(来自 Lombok)将调用无参数构造函数,我可以自己编写该构造​​函数。

@RequiredArgsConstructor(onConstructor = @__({@Autowired}), useDefaultConstructor = true)
// Note the "useDefaultConstructor = true" 
public class ServiceImpl implements Service {
    @NonNull
    private final Member1 m1; 

    private ServiceImpl() {
        //some self-written setup-code
    }
}
Run Code Online (Sandbox Code Playgroud)

生成的类:

public class ServiceImpl implements Service {
    private final Member1 m1;

    // This constructor is not generated by lombok
    private ServiceImpl() {
        //some self-written setup-code
    }

    // Constructor generated by lombok
    @Autowired
    public ServiceImpl(Member1 m1) {
       this(); // <- only created when "useDefaultConstructor" is present
       this.m1 = m1;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题

有没有办法用 lombok 做到这一点?我懒得为自己编写构造函数(并且每次需要新的 spring 成员时都更改它)。

fre*_*chu 5

你尝试过Spring@PostConstruct注解吗?

@PostConstruct
public void init() {
    // setup-code
}
Run Code Online (Sandbox Code Playgroud)

它是 Spring bean 生命周期管理的一部分。