Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Artigo Java Magazine 40 - Começando com Spring
Editorial da Revista Java Magazine Edição 40.

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.
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.
Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Daniel Cicero Amadei
Blog: http://www.amadei.com.br
Bacharel em Sistemas de Informação pelo Mackenzie e pós-graduado pela Fundação Vanzolini. Trabalha com Java desde 1999 e possui as certificações SCJP, SCWCD, SCBCD, SCDJWS, SCEA, BEA Certified Developer: Integration Solutions e BEA Certified SOA Architect....




