Spring Integration: избавьтесь от дублирования кода для настройки bean-компонентов

Для моего проекта клиента SFTP я использую интеграцию Spring. У нас разные клиенты, и мы должны подключаться к разным SFTP-серверам, но вся логика одинакова, поэтому я абстрагировал их в AbstractSFTPEndPoint. Каждый специфичный для клиента класс реализует getClientId (), который используется AbstractSFTPEndPoint для получения специфичных для клиента деталей, таких как учетные данные SFTP.

Тем не менее, вся логика одинакова для всех клиентов, но мне все еще приходится реализовывать конкретные классы для каждого клиента. Это главным образом потому, что нам нужен отдельный «MessageSource» для каждого клиента.

Как я могу избавиться от этого дублирования?

public class SFTPEndPointForClientAAAA extends AbstractSFTPEndPoint {

    public String getClientId(){
       return "clientAAAA";
    }

    @Bean(name = "channelForClientAAAA")
    public QueueChannel inputFileChannel() {
        return super.inputFileChannel();
    }

    @ServiceActivator(inputChannel = "channelForClientAAAA", poller = @Poller(fixedDelay = "500"))
    public void serviceActivator(Message message) {
        super.serviceActivator(message);
    }

    @Bean(name = "messageSourceForClientAAAA")
    @InboundChannelAdapter(value = "channelForClientAAAA",
            poller = @Poller(fixedDelay = "50", maxMessagesPerPoll = "2"))
    public MessageSource messageSource() {
        return super.messageSource();
    }
}

B, как правило, у меня есть куча хостов SFTP для подключения и применения той же логики. Я хочу, чтобы это было сделано автоматически без необходимости реализации класса для каждого хоста SFTP.

Ответы на вопрос(1)

Ваш ответ на вопрос