image

Bolsas de estudo DIO PRO para acessar bootcamps ilimitados

Disponible sólo:

23 vacantes
Article image
Afonso Silveira
Afonso Silveira18/02/2026 21:46
Compartir
Microsoft Azure Cloud Native 2026Recomendado para tiMicrosoft Azure Cloud Native 2026

Factory Method + Spring Boot: um fluxo, várias implementações

    Quando o código precisa decidir “qual implementação usar”, é comum aparecer um ponto central cheio de condicionais. Esse ponto vira gargalo de manutenção: quanto mais variações você adiciona, mais ele cresce e mais fácil é introduzir regressões.

    O Factory Method resolve essa parte: você deixa o processo principal fixo e cria um ponto único onde a implementação concreta é escolhida. No Spring, dá pra deixar essa escolha com o container usando injeção + @Profile.

    A ideia aqui é simples: o processo não muda, só muda “quem faz a leitura”.

    O ponto de acoplamento no fluxo

    onsidere este fluxo de importação:

    • ler o arquivo
    • validar o que veio
    • persistir (ou enviar pra fila, chamar API, etc)

    O problema aparece quando a etapa de leitura vira um “seletor” espalhado pelo código: if pra CSV, if pra JSON, instância pra cada caso. A cada formato novo, você precisa voltar e alterar esse mesmo ponto.

    Em vez disso, vamos separar:

    • Contrato do leitor (o que o processo precisa)
    • Implementações (CSV, JSON)
    • Pipeline fixo que chama um método fábrica pra obter o leitor certo

    O contrato do “produto” (o que varia)

    image

    image

    O pipeline só enxerga LeitorArquivo. Ele não precisa saber (e nem deveria) se aquilo é CSV, JSON, etc.

    Implementações concretas (seleção por @Profile)

    image

    JSON

    image

    Ponto importante: as duas classes implementam o mesmo contrato, mas só uma fica ativa dependendo do profile.

    O pipeline (Creator) + Factory Method

    Agora entra o padrão: um pipeline com o fluxo fixo e um Factory Method que devolve o leitor “certo”.

    image

    Aqui você mantém o padrão: existe um método de criação (criarLeitor()), mas a decisão prática ficou com o Spring.

    Executando o fluxo (exemplo com CommandLineRunner)

    image

    Selecionando CSV ou JSON

    java -jar app.jar --spring.profiles.active=csv

    java -jar app.jar --spring.profiles.active=json

    Via application.yml:

    spring:

      profiles:

        active: csv

    Antes de ir pra produção

    1. Defina o profile: sem isso, não existe LeitorArquivo para injetar.
    2. Evite dois leitores ativos: se ativar mais de um profile, a injeção fica ambígua.
    3. Se a escolha for por arquivo: prefira lookup/registry em vez de profile.
    Compartir
    Recomendado para ti
    Riachuelo - Cibersegurança
    Microsoft Certification Challenge #5 - AZ-204
    Microsoft Certification Challenge #5 - DP 100
    Comentarios (0)
    Recomendado para tiMicrosoft Azure Cloud Native 2026