Integración de Spring: elimine la duplicación de código para configurar beans

Para mi proyecto de cliente SFTP, estoy usando la integración de Spring. Tenemos diferentes clientes y tenemos que conectarnos a diferentes servidores SFTP, pero, toda la lógica es la misma, así que los resumí en AbstractSFTPEndPoint. Cada clase específica del cliente implementa getClientId (), que es utilizada por AbstractSFTPEndPoint para obtener detalles específicos del cliente, como las credenciales SFTP.

Sin embargo, toda la lógica es la misma para todos los clientes, pero todavía tengo que implementar clases específicas para cada cliente. Esto se debe principalmente a que necesitamos "MessageSource" por separado para cada cliente.

¿Cómo puedo deshacerme de esta duplicación?

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 tengo un montón de hosts SFTP para conectar y aplicar la misma lógica. Quiero que se haga automáticamente sin tener que implementar la clase para cada host SFTP.

Respuestas a la pregunta(1)

Su respuesta a la pregunta