【问题标题】:Lombok with default-constructor带有默认构造函数的龙目岛
【发布时间】:2018-06-05 08:22:33
【问题描述】:

我有这样的课:

@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;

}

构造函数将由 Lombok 创建,在运行时,sp​​ring 会将成员注入构造函数。 现在我需要一个设置方法并被 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
    }
}

生成的类:

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;
    }
}

问题

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

【问题讨论】:

    标签: java spring lombok


    【解决方案1】:

    你试过Spring @PostConstruct注解吗?

    @PostConstruct
    public void init() {
        // setup-code
    }
    

    它是 Spring 的beans lifecycle management 的一部分。

    【讨论】:

    • 这正是我想做的。
    • 您可以在 Spring 文档的this chapter 中找到更多关于 Beans Lifecycle 的信息
    猜你喜欢
    • 2018-06-01
    • 1970-01-01
    • 2019-03-29
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多