当前,我上了这个课:
@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>
的类,但我不太想知道如何获得它。
答案 0 :(得分:1)
假设AuditFactory
存储在单独的模块中,则只需将Supplier<String> auditIdSupplier()
移动到该模块,并让FrontOfficeProperties
和BackOfficeProperties
都实现相同的{{1} }界面。
然后,每当构建c
或front-office
时,都会注入适当的back-office
。