Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo:

O artigo apresenta o conceito e a prática do uso de injeção de dependências com o auxílio do Spring Framework 3. Também demonstra um simples exemplo de persistência de dados com o recurso JdbcTemplate, a integração do Spring com o framework de testes JUnit e um pouco sobre a Spring Expression Language (SpEL).

Em que situação o tema é útil:

É útil para quem deseja passar a usar o Spring Framework como ferramenta de apoio no desenvolvimento de aplicações e ainda não tem ideia de como começar a fazê-lo.

Resumo DevMan:

O Spring Framework é considerado por muitos desenvolvedores como um framework muito poderoso. Com o Spring é possível desenvolver aplicações que façam uso de injeção de dependências, MVC e ainda aproveitar um grande número de APIs disponibilizadas por ele que facilitam em muito o trabalho do programador.

No artigo é possível conhecer os meios de se fazer uso da injeção de dependências fornecidos pelo Spring, configurando os beans com anotações ou sem anotações. Também é demonstrado como usar a API JdbcTemplate, uma entre muitas APIs disponibilizadas pelo Spring. Por fim, são abordados casos de teste com a integração entre o Spring e o framework de testes unitários JUnit. Uma rápida abordagem à linguagem de expressões, Spring Expression Language (SpEL), também é apresentada, assim como criar beans de maneira programática, isto é, sem a necessidade deles serem declarados no arquivo XML de configuração.

No mundo do desenvolvimento de sistemas, existem vários frameworks que simplificam a vida dos programadores na implementação de seus projetos. Mas o que é exatamente um framework?

Um framework é uma arquitetura, ou uma estrutura, que fornece ferramentas comuns a vários projetos. Por ser construído com base em diversos tipos de padrões, permite o reuso de classes e proporciona um ambiente de desenvolvimento muito mais produtivo. Neste ponto, vale ressaltar que a solução de problemas comuns no desenvolvimento de softwares pode ser encontrada com muito mais facilidade quando se seleciona um framework específico para tal situação.

Na atualidade, há diversos frameworks disponíveis, como Hibernate, Struts, JSF, Zend, VRaptor, Spring, entre muitos outros. A padronização de processos, o uso de boas práticas, a ampla disponibilidade de recursos, o reaproveitamento de código, a facilidade de manutenção e uma maior produtividade são algumas das vantagens encontradas ao se fazer uso de frameworks em projetos de software.

Um framework muito popular na comunidade Java é o Spring. Idealizado por Rod Johnson, possui código aberto e foi lançado em março de 2004. O Spring é considerado por muitos desenvolvedores como o framework mais vitorioso e poderoso disponível para a linguagem Java, em decorrência de sua grande aceitação, possibilidade de integração e APIs disponíveis. O Spring fornece várias ferramentas para serem utilizadas em projetos, por exemplo: Spring Security, Spring Social, Spring MVC, Spring Rich Client, entre outras. A mais usada com certeza é o Container de Inversão de Controle (Inversion of Control – IoC) e Injeção de Dependências (Dependency Injection – DI). A injeção de dependências possibilita um baixo nível de acoplamento entre os módulos do sistema, e tem como finalidade injetar em cada componente suas dependências. A inversão de controle trás o lema: “não nos chame, nós chamamos você”. É a técnica de desenvolvimento na qual um comportamento do sistema é delegado a uma entidade externa, neste caso o Container IoC do Spring. Isso significa que o Container IoC assume a responsabilidade de criar novos objetos e destruí-los quando necessário.

Além disso, o Spring Framework fornece a implementação de várias especificações Java EE, como: JMS, JDBC, JavaMail, JNDI, entre várias outras. Implementações como estas são disponibilizadas através de objetos que o Spring chama de “template”, como JmsTemplate, HibernateTemplate, RestTemplate, etc. Por exemplo, quem usa o Hibernate necessita programar classes que contenham objetos de SessionFactory, Session e Transaction. Assim, se deve desenvolver o controle de transações e controlar quando iniciar e fechar uma sessão. Com o uso do HibernateTemplate tudo isso é controlado pelo Spring, visto que ele já possui tudo isso implementado. Mesmo assim, se você precisar usar a sua própria implementação, também pode ter essa possibilidade de integrá-la com o Spring.

Neste contexto, este artigo apresentará alguns conceitos e técnicas de como fazer uso da injeção de dependências gerenciada pelo Spring, e como utilizar e configurar um objeto JdbcTemplate para persistência de dados. Será demonstrado também um caso de testes usando o framework JUnit, integrado com o Spring, para testar a injeção de dependências e a persistência de dados. O artigo aborda ainda uma pequena introdução ao uso da linguagem SpEL (Spring Expression Language), que possui vários recursos como a leitura de arquivos de propriedades.

O que é o framework Spring?

O Spring, atualmente na versão 3, nasceu como uma resposta à complexidade existente no uso de EJB (Enterprise Java Beans). Rod Johnson idealizou e o descreveu em seu livro “Expert One-on-One: J2EE Design and Development”. O framework é baseado nos padrões de projeto inversão de controle (IoC) e injeção de dependência (DI). No Spring, o Container IoC se encarrega de “instanciar” classes de uma aplicação Java e definir as dependências entre elas através de um arquivo de configuração no formato XML ou anotações nas classes, métodos e propriedades. Desta forma, se permite o baixo acoplamento entre classes de uma aplicação orientada a objetos.

Este framework é composto por recursos organizados em vários módulos (veja a Figura 1), como testes unitários, web, persistência, acesso remoto, programação orientada a aspectos, entre outros. Estes módulos podem ser implementados separadamente ou em conjunto, conforme a necessidade do projeto. Isto possibilita que o Spring seja empregado nos mais variados tipos de aplicação, sendo elas de pequeno, médio ou grande porte. Com sua arquitetura baseada em interfaces e POJOs, possui como um dos seus principais objetivos tornar mais fácil o uso das tecnologias existentes no mercado. Outro recurso interessante é o Lazy Initialization, que permite ao Spring carregar apenas os beans solicitados. Assim, a aplicação ganha em desempenho porque se um bean for declarado no contexto, mas não estiver sendo utilizado, ele não será carregado até que seja necessário. Para entender um pouco mais sobre o funcionamento do Spring Framework, é interessante analisar a distribuição de seus módulos e sub módulos descritos a seguir.

Figura 1. Estrutura dos módulos do Spring 3.

Plain Old Java Objects, ou simplesmente POJO, são objetos que não herdam ou implementam ninguém. Eles são independentes de classes externas, ou seja, são classes simples, que não estão presas a nenhum framework ou biblioteca. O termo foi criado quando Rebecca Parsons, Josh MacKenzie e Martin Fowler se preparavam para uma palestra em uma conferência em Setembro de 2000.

Módulo Core Container

O módulo Core Container é chamado de Container de Inversão de Controle e é considerado o núcleo do framework. Nele estão localizadas as funcionalidades padrões do Spring e alguns módulos internos como o Core, Beans, Context e Expression Language. O Beans e o Core fornecem as peças fundamentais da estrutura, incluindo o IoC (Inversão de Controle) e o DI (Injeção de Dependência).

O BeanFactory, presente no módulo Beans, é uma implementação sofisticada do padrão Factory, sendo responsável por aplicar a injeção de dependências e a inversão de controle no sistema.

O Context se constitui por uma base sólida fornecida pelos módulos Core e Beans. É um meio para acessar objetos de maneira semelhante a um registro JNDI. Ele herda as características do módulo Beans e adiciona suporte à internacionalização (i18N) a partir de arquivos de mensagens, comunicação entre os componentes via propagação de eventos, recurso de carregamento de arquivos e a criação de contextos específicos, tais como para aplicações desktop ou aplicações web. O módulo também suporta recursos Java EE, como EJB, JMX, JNDI, Mail, entre outros. O ponto principal do Context é a interface ApplicationContext, uma extensão da interface BeanFactory.

...
Quer ler esse conteúdo completo? Tenha acesso completo