Spring não gerencia tudo. Só gerencia o que é Bean
Quem está começando com Spring costuma passar por uma situação bem comum: a classe está anotada, a aplicação sobe normalmente, mas alguma dependência vem null, uma configuração não é aplicada ou o comportamento esperado simplesmente não acontece. A impressão inicial é que o framework falhou.
Na maioria das vezes, o problema é mais simples que isso.
O ponto que muita gente perde
Spring só gerencia objetos que ele conhece como Bean.
Ou seja: não basta a classe existir ou ter uma anotação. O objeto precisa estar registrado no contexto da aplicação para que o framework consiga atuar sobre ele. É nesse momento que o Spring consegue injetar dependências, aplicar configurações e participar do ciclo de vida da instância.
Se o objeto foi criado fora desse fluxo, ele está fora do controle do framework.
O erro mais comum
O erro clássico é instanciar manualmente uma classe que deveria ser gerenciada pelo Spring.
@Component
public class PedidoService {
}
public class App {
public static void main(String[] args) {
PedidoService service = new PedidoService();
}
}
Nesse exemplo, PedidoService está anotado, mas foi criado com new. Isso significa que essa instância específica não foi entregue pelo container. Para o Spring, ela não está sob gerenciamento.
É por isso que muita gente se confunde. A anotação está lá, o código compila, a aplicação sobe, mas o objeto em uso não é um Bean ativo no contexto.
Por que isso quebra a ideia de “mágica”
Spring ajuda muito, mas não faz mágica. Ele não “descobre depois” que um objeto criado manualmente deveria estar sendo tratado como Bean. Se a instância nasceu fora do container, ela será apenas um objeto Java comum.
Esse detalhe explica vários comportamentos estranhos em projetos reais. O código parece certo, mas a forma de criar o objeto já tirou o Spring da jogada.
Insight final
Antes de dizer que “o Spring não funcionou”, faça uma pergunta mais simples: esse objeto foi realmente criado e entregue pelo container? Em muitos casos, o erro não está no framework. Está só no fato de que ele nunca esteve gerenciando aquela instância.
