【问题标题】:Lombok does not generate RequiredArgsConstructor and AllArgsConstructorLombok 不生成RequiredArgsConstructor 和AllArgsConstructor
【发布时间】:2019-06-17 04:18:28
【问题描述】:

我正在使用带有 Java 8 和 Spring-Boot 1.5.9.RELEASE 的 Lombok 1.16.18 和 Gradle 4.0。

当我构建并运行项目时它会成功,但是当调用包含自动装配的服务时它会失败并使用 NullPointerException @RequiredArgsConstructor(onConstructor = @__(@Autowired))@AllArgsConstructor(onConstructor = @__(@Autowired))

我检查了生成的 .classes,它们缺少构造函数。

当然,如果我手动创建构造函数并将@Autowire 放在上面,它就可以工作。但我正在开发一个包含大量现有代码的大型项目,并且不想重写所有内容。关于为什么会发生这种情况的任何想法?看起来 gradle 或 lombok 没有预处理这些注释,但是所有其他 @Getter@Setter 等都工作正常并且生成的 .class 文件包含它们......

【问题讨论】:

    标签: java spring-boot gradle lombok


    【解决方案1】:

    我使用构造函数注入只定义@RequiredArgsConstructorfinal成员变量如下(不使用onConstructor

    @Repository
    @Slf4j
    @RequiredArgsConstructor
    public class FieldRepository {
    
        private final DSLContext dsl;
    
        private final DataSource dataSource;
    
        //... dsl and datasource are correctly injected 
    
    }
    

    【讨论】:

    • 那会自动装配自动装配吗?
    • 是的,您将进行构造函数注入,因为 dsldataSourcefinal
    • 哇原来final是关键,我不知道
    • final 是关键,因为@RequiredArgsConstructor 只考虑final 字段。如果你没有,Lombok 会给你一个无参数的构造函数。 Spring 会调用它,并且不会调用额外的全参数构造函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    相关资源
    最近更新 更多