Spring Inicial

Conhecendo e Aplicando a Injeção de Dependências

 

Cada vez maios se fala sobre o padrão de Injeção de Dependências. Você irá conhecer esse padrão além de aprender como implementá-lo, utilizando o Spring.

 

Daniel Cícero Amadei

 

A injeção de dependências é uma nova tecnologia relativamente nova no mundo do desenvolvimento orientado a objetos, porém é a resposta para uma necessidade antiga: retirar de um objeto o conhecimento sobre como obter os objetos que colaboram com ele, ou seja, as suas dependências.

Neste artigo serão apresentadas a teoria básica e as vantagens da injeção de dependências. Veremos também uma introdução ao Spring, onde mostramos como esse framework provê a injeção de dependências para aplicações Java.

 

Em busca do desacoplamento

A colaboração entre os objetos em sistemas é primordial, mas se alguns cuidados não forem tomados sobre como essa colaboração ocorrerá,podemos terminar com objetos muito acoplados uns com os outros, dificultando a manutenção, os testes e a evolução de nossos sistemas.

Isso nos leva à seguinte pergunta: como desacoplar objetos se eles precisam se comunicar uns com os outros? A codificação baseada em interfaces é um importante primeiro passo. Quando um objeto cliente é implementado baseando-se nas interfaces dos objetos com os quais se relaciona, é possível alterar as implementações dessas interfaces sem precisar modificar o objeto cliente. Um exemplo conhecido desse mecanismo, é a API JDBC, em que as funcionalidades são definidas por interfaces e a implementação fica a cargo dos drivers.

Usa a codificação baseada em interfaces promove parte do desacoplamento, porém ainda exige que um objeto conheça a forma de obter suas dependências, criando acoplamento entre esses objetos. É justamente esse problema que a injeção de dependências resolve.

 

Injeção de dependências e containers

Com a injeção de dependências, as dependências dos objetos são configuradas declarativamente, em arquivos de configuração e não no código-fonte.

A "montagem" dos objetos ocorre através de um container leve (lightweight container), que interpreta as configurações e compõe os objetos baseando-se nelas. O container fica responsável pela criação dos objetos e por resolver e atribuir suas dependências, para que quando os objetos forem solicitados já estejam configurados e inicializados, prontos para o uso.

 

...

Quer ler esse conteúdo completo? Tenha acesso completo