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.