Java / Spring:提供通用的实现java函数(Supplier或Function ...)

时间:2018-11-06 08:37:04

标签: java spring spring-boot

当前,我上了这个课:

@Component
public class AuditFactory {

    private Supplier<String> auditIdSupplier;

    public AuditFactory(Supplier<String> auditIdSupplier) {
        this.auditIdSupplier = auditIdSupplier;
    }
}

我已经编码了两个使用此AuditFactory的项目。

当前,我使用此@Bean为他们提供

在项目front-office中:

@Bean
public Supplier<String> auditIdSupplier(FrontOfficeProperties frontOfficeProperties) {
    return () -> String.join(
        "-",
        frontOfficeProperties.getCpdId(),
        UUID.randomUUID().toString()
    );
}

在项目back-office中:

@Bean
public Supplier<String> auditIdSupplier(BackOfficeProperties backOfficeProperties) {
    return () -> String.join(
        "-",
        backOfficeProperties.getCpdId(),
        UUID.randomUUID().toString()
    );
}

因此,我想避免创建与我需要的项目一样多的Supplier<String>实现,以便提供与创建id的通用方法相同的方法。

唯一改变的是一个参数(cpdid)。

因此,我想我可以创建一个继承自Supplier<String>的类,但我不太想知道如何获得它。

1 个答案:

答案 0 :(得分:1)

假设AuditFactory存储在单独的模块中,则只需将Supplier<String> auditIdSupplier()移动到该模块,并让FrontOfficePropertiesBackOfficeProperties都实现相同的{{1} }界面。

然后,每当构建cfront-office时,都会注入适当的back-office