Pergunta de entrevista para Desenvolvedor Java

Como injeção de dependências funciona no Spring, e por que você prefere injeção por construtor?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

O container constrói os beans e fornece seus colaboradores, então as classes declaram o que precisam em vez de construir. Injeção por construtor é preferível porque as dependências são obrigatórias e visíveis, os campos podem ser final para o objeto ficar imutável e totalmente inicializado, a classe é testável com um new puro e sem reflexão, e uma dependência circular falha alto no startup em vez de se esconder atrás de injeção preguiçosa em campo.

Por que os entrevistadores perguntam isso

É uma pergunta de design vestida de framework. O entrevistador quer ouvir sobre testabilidade e imutabilidade em vez da mecânica das anotações, mais consciência de escopos de bean e da armadilha de singleton que é colocar estado mutável num bean compartilhado. Se você consegue explicar como testaria a classe sem um contexto Spring diz muito sobre seus hábitos de teste unitário.

Como estruturar sua resposta

  • Descreva inversão de controle em uma frase.
  • Dê as vantagens concretas da injeção por construtor.
  • Cite escopos e o perigo de estado num singleton.
  • Explique como isso molda seus testes.

Exemplo de resposta

Exemplo falado, em primeira pessoa

O container é dono da criação de objetos, então minha classe pede o que precisa no construtor e o Spring resolve e injeta. Eu uso injeção por construtor porque ela torna o contrato óbvio: se uma classe recebe cinco colaboradores, isso agora está visível na assinatura em vez de escondido em cinco campos anotados, e normalmente isso me diz que a classe está fazendo demais. Os campos podem ser final, então o objeto fica totalmente construído e seguro para publicar entre threads, e eu consigo instanciá lo num teste com argumentos de construtor puros e nenhum contexto Spring, o que mantém os testes unitários rápidos. Dependências circulares também aparecem no startup como falha em vez de serem varridas para debaixo do tapete. Sobre escopo, beans são singletons por padrão, então eu os mantenho sem estado; um campo mutável num serviço singleton é uma condição de corrida esperando por requisições concorrentes. Quando eu preciso de estado por requisição eu passo como parâmetro de método em vez de apelar para um bean com escopo de requisição. Injeção em campo eu evito ativamente, já que ela esconde dependências e precisa de reflexão para ser montada num teste.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Como você lidaria com dois beans do mesmo tipo?
  • O que acontece quando você injeta um bean prototype num singleton?
  • Como você testa um componente que depende da requisição atual?

Mais perguntas para Desenvolvedor Java

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot