Article image
Renan Soares
Renan Soares19/06/2024 10:22
Compartilhe

Inversão de Controle e Injeção de Dependência no Spring simplificado

  • #Spring
  • #Java
  • #POO

Hoje em dia, esses dois conceitos são amplamente discutidos e utilizados, se você é recém chegado ao Spring, com certeza já deve ter ouvido falar, afinal, eles constituem alguns dos principais fundamentos do Spring Core. Mas afinal, o que cada um significa e quais as suas diferenças? Esse artigo visa esclarecer isso, vamos lá.

Vou utilizar de exemplo um contexto de uma Web Application, onde normalmente temos alguns layers, como controller, service, repository e para cada classe é necessário no mínimo uma instância de outra, para que seja possível usar suas respectivas funcionalidades dentro dela. Aí você pode afirmar, bom é simples, basta dar um new() e criar um objeto manualmente, eu te respondo, certo, mas e se no projeto que você estiver trabalhando possuir uma grande quantidade de classes, vai ser difícil administrar todos os objetos não é? Outra coisa, quando você cria um objeto manualmente, em outras palavras, você agora é o responsável por todo o ciclo de vida daquele objeto, desde sua criação, manutenção e destruição, é uma baita responsabilidade, não é?...

Mas aí chega o Spring e te diz: "Calma, eu tenho uma solução! Você desenvolvedor, foque apenas na lógica, e eu (Spring) gerencio os objetos pra você." Essa é a filosofia do Spring, facilitar a vida do programador.

E é aí que entra o conceito de Inversão de Controle (IOC), antes eu era o responsável por controlar o objeto, agora estou passando essa responsabilidade pra outro, no caso o Spring. Isso é inversão de controle, é a parte teórica, filosófica, agora irá chegar a injeção de dependência.

Veja por exemplo, uma classe "A" e classe "B", se A utiliza funcionalidades da classe B então ela possui uma dependência em B. Injeção de Dependência (DI) é a implementação prática do conceito de inversão de controle, e o Spring faz isso com muita eficiência. Parafraseando Mateus 7:7-8, toda vez que pedires o objeto, o Spring lhe dará, irá fazer essa injeção de dependência, chega de criar manualmente.

Mas aí você pergunta, tá, mas como o Spring vai saber que eu quero uma instância daquele objeto, estamos chegando na parte prática. A resposta é que existem diversas maneiras de fazer isso no Spring Boot, injeção por construtor, por métodos setter, entre outros, mas esse não é o foco do artigo, caso queira saber mais sobre este tópico deixo o link https://dev.to/eidher/spring-injection-types-c6d

Algumas vantagens da injeção de dependências são:

  • Baixo acoplamento entre código
  • Testes unitários são muito mais fáceis de serem realizados
  • Reuso e flexibilidade

De uma forma geral, esses dois conceitos revolucionaram a maneira como desenvolvemos e mantemos o software, trazendo inúmeros benefícios, a medida que permite a criação de sistemas mais robustos, flexíveis e testáveis e também alivia o trabalho do programador.

O objetivo desse artigo foi trazer de forma bem simplificada e abstrata esses dois conceitos cruciais no desenvolvimento de software. Se isso te ajudou, curte e compartilha aí. Tamo junto!

Compartilhe
Comentários (1)
Renan Soares
Renan Soares - 19/06/2024 11:03

Também publiquei esse artigo no Linkedin (meu primeiro inclusive), quem puder fortalecer lá

Inversão de Controle e Injeção de Dependência no Spring simplificado | LinkedIn