No começo, Spring parece uma coleção de atalhos.
Você coloca algumas anotações, sobe a aplicação e as dependências aparecem prontas.
A impressão é simples: o framework só deixou o código mais fácil.
No Spring, o controle da criação dos objetos sai da mão do desenvolvedor.
É isso que a Inversão de Controle, ou IoC, quer dizer.
O que mudou de verdade
Em uma aplicação Java comum, você decide quando e como criar cada objeto com new.
No Spring, essa responsabilidade muda de lugar.
Em vez de cada classe sair criando suas dependências, o container cria os objetos e entrega o que a aplicação precisa.
Essa é a inversão.
O controle que antes estava no seu código passa para o framework.
Um exemplo simples
@Component
public class EmailService {
}
@Component
public class PedidoService {
private final EmailService emailService;
public PedidoService(EmailService emailService) {
this.emailService = emailService;
}
}
Aqui, PedidoService depende de EmailService.
Sem Spring, esse relacionamento seria resolvido manualmente com new.
Quem cria EmailService e entrega essa dependência para PedidoService é o Spring.
Você descreve a dependência. O container cuida da montagem.
Onde entra o Bean
Para isso funcionar, o Spring precisa conhecer os objetos que vai gerenciar.
Quando um objeto é registrado e controlado pelo container, ele passa a ser um Bean.
IoC é a troca de controle.
Bean é o objeto que o Spring passa a controlar dentro desse modelo.
Sem Bean, não há gerenciamento. E sem gerenciamento, não existe IoC na prática.
Esse ponto se conecta diretamente com o post sobre Bean: o Spring só consegue assumir o controle do que ele realmente gerencia.
O ponto que muda sua leitura do Spring
Muita gente tenta entender Spring decorando anotação, mas a pergunta central é outra: quem está criando os objetos da aplicação?
Quando a resposta deixa de ser "eu, com new" e passa a ser "o container, como Bean", o framework começa a fazer sentido.
Spring não entra depois para organizar objetos que você já criou. Ele precisa participar da criação desde o começo.
Por isso, IoC não é detalhe de framework. É a base que explica o resto.
