TRONG>

Atenção: por essa edição ser muito antiga não há arquivo PDF para download.Os artigos dessa edição estão disponíveis somente através do formato HTML.

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.

 

Tipos de injeção de dependências

Há dois estilos de injeção de dependências amplamente utilizados:

Setter injection - A atribuição das dependências e efetuada através de métodos setPropriedade() (seguindo o padrão JavaBeans). O container invoca esses métodos informando como parâmetro o valor a ser atribuído à propriedade.

Constructor injection - A atribuição das dependências ocorre através do construtor da classe. O container fica responsável pela instanciação do objeto utilizando um construtor específico, que deve receber os parâmetros e atribuí-los as propriedades correspondentes.

 

Apresentando o Spring

O Spring é um container leve (e também um framework), capaz de realizar a injeção de dependências dos tipos Setter e Constructor. Além dessa capacidade, o Spring provê abstrações e utilitários para várias tecnologias que compõem a família Java EE como JMS, EJB,JavaMail, JCA, JDBC, JNDI e Java Persistence API (parte do novo JavaEE5); também se integra a tecnologias como Programação Orientada a Aspectos (AOP) e ferramentas de mapeamento relacional (Hibernate, iBATISetc.).

O núcleo do Spring se concentra no seu arquivo de configuração e na interface

org.springframework.beans.factory.BeanFactory, que é responsável pela criação e atribuição das dependidas nos objetos gerenciados pelo container. A BeanFactory organiza a lista de objetos gerenciados, mantendo um nome único para cada um. O método getBean() de BeanFactory recebe um nome como parâmetro e retorna o objeto correspondente (ou lança uma exceção caso ele não exista no container).

 

Primeira aplicação com Spring

Nosso primeiro exemplo será o velho e bom "Olá, Mundo". Será criada uma classe simples, contendo uma mensagem cujo valor é atribuído através da injeção de dependência. Depois essa mensagem é impressa no console.

 

Obtendo o Spring

O primeiro passo é obter o Spring no endereço springframework.org/download. O download recomendado é a versão 2.0. Baixe o arquivo spring-framework-2.0-rc3-with-dependencies.zip (ou versão mais recente), que já possui as dependências para execução de todos os módulos do Spring. É necessário também obter o Apache Xerces, pois é exigida a presença de um interpretador de XML. Acesse apache.org/dist/xml/xerces-j e realize o download do arquivo Xerces-J-bin.2.8.0.zip.

 

Preparando o ambiente

Crie uma pasta em qualquer local, com nome (por exemplo) javamagazine-spring.

Descompacte o zip do Spring para uma pasta temporária e copie o arquivo dist/spring.jar e a pasta lib para a nova pasta. Descompacte também o arquivo Xerces-J-bin.2.8.0.zip para uma pasta temporária e copie os arquivos xerceslmpl.jar e xml-apis.jar para javamagazine-spring. Com isso nosso ambiente está pronto.

 

Implementando o exemplo

Vamos criar uma subpasta exemplo1, que irá conter os arquivos de nosso primeiro exemplo. Nela iremos codificar a classe OlaMundo, conforme a Listagem 1. Devemos codificar também o arquivo build.xml, que será responsável pela compilação e execução, conforme a Listagem 2. Por fim deve ser criado o applicationContext.xml (o arquivo de configuração do Spring), conforme a Listagem 3. Após a codificação desses itens, basta executar o comando ant

dentro da pasta exemplo1. Como resultado, será impresso no console a mensagem:

 

...

Quer ler esse conteúdo completo? Tenha acesso completo