Java / Spring: предоставьте общую реализацию java-функции (поставщик или функция ...)

В настоящее время у меня есть этот класс:

@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>, но я не совсем понимаю, как его получить.

AuditFactory идет из отдельного модуля?

syntagma 06.11.2018 09:42

Взгляните на @ConfigurationProperties, вы можете загрузить свой идентификатор в bean-компонент и автоматически подключить его к своей AuditFactory.

Nyamiou The Galeanthrope 06.11.2018 10:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
95
1

Ответы 1

Предполагая, что AuditFactory хранится в отдельном модуле, вы можете просто переместить Supplier<String> auditIdSupplier() в этот модуль и заставить FrontOfficeProperties и BackOfficeProperties реализовать один и тот же интерфейс c.

Затем, когда вы будете собирать front-office или back-office, будет вставлен правильный OfficeProperties.

Другие вопросы по теме