Spring Integration: Beseitigen Sie Code-Duplikationen beim Einrichten von Beans

Für mein SFTP-Client-Projekt verwende ich die Spring-Integration. Wir haben verschiedene Clients und müssen eine Verbindung zu verschiedenen SFTP-Servern herstellen, aber die gesamte Logik ist gleich. Deshalb habe ich sie in AbstractSFTPEndPoint abstrahiert. Jede clientspezifische Klasse implementiert getClientId (), das von AbstractSFTPEndPoint verwendet wird, um clientspezifische Details wie SFTP-Anmeldeinformationen abzurufen.

Die gesamte Logik ist jedoch für alle Clients gleich, aber ich muss immer noch spezifische Klassen für jeden Client implementieren. Dies liegt hauptsächlich daran, dass wir für jeden Client eine separate "MessageSource" benötigen.

Wie kann ich diese Duplizierung entfernen?

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, asically Ich habe eine Reihe von SFTP-Hosts, um die gleiche Logik zu verbinden und anzuwenden. Ich möchte, dass dies automatisch erfolgt, ohne dass die Klasse für jeden SFTP-Host implementiert werden muss.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage