@RequiredArgsConstructor(onConstructor_ = @Autowired)在此注解中为什么要加_

561 阅读2分钟

在使用@RequiredArgsConstructor注解时,如果需要为某些字段生成对应的构造函数并自动注入这些字段,可以使用onConstructor_属性来标识生成的构造函数,而后面需要加上_符号。

这是因为在使用Lombok库时,如果想要在生成的构造函数中使用注解来标识需要自动注入的字段,需要使用onConstructor属性。但是,由于Java语言中onConstructor是一个保留关键字,因此无法用作属性名称。为了避免这个问题,Lombok库特意在onConstructor后添加了一个下划线,即onConstructor_,来作为属性名称,以避免冲突。

因此,当我们想要在使用@RequiredArgsConstructor注解时,为生成的构造函数添加自动注入的字段时,需要使用onConstructor_属性并加上下划线,以确保代码可以正确编译。

在使用@RequiredArgsConstructor(onConstructor_ = @Autowired)注解时,字段是否可以被final修饰的问题,实际上是取决于使用的Lombok版本和注解的具体用法。

在Lombok 1.18.20及以上的版本中,使用@RequiredArgsConstructor(onConstructor_ = @Autowired)注解时,可以使用final修饰字段,并且Lombok会自动生成构造函数并在构造函数中自动注入这些字段。这是因为Lombok更新后支持在生成的构造函数中使用@Autowired注解,因此不再需要去掉final修饰符。

但是,如果使用的是Lombok 1.18.18及以下的版本,或者使用的是不支持在构造函数中使用@Autowired注解的Lombok插件,那么在使用@RequiredArgsConstructor(onConstructor_ = @Autowired)注解时,不能使用final修饰字段。在这种情况下,Lombok会自动生成一个不包含final字段的构造函数,并在构造函数中自动注入其他字段。

综上所述,如果您使用的是Lombok 1.18.20及以上的版本,并且需要在@RequiredArgsConstructor(onConstructor_ = @Autowired)注解中使用final修饰字段,可以放心使用。但是,如果您使用的是低于1.18.20的版本或者不支持在构造函数中使用@Autowired注解的Lombok插件,建议不要使用final修饰字段,以避免在生成的构造函数中出现问题。