© 2013, Casa do Código
Todos os direitos reservados e protegidos pela Lei nº9.610, de 10/02/1998. Nenhuma parte deste livro poderá ser reproduzida, nem transmitida, sem auto-rização prévia por escrito da editora, sejam quais forem os meios: fotográficos, eletrônicos, mecânicos, gravação ou quaisquer outros.
Casa do Código Livros para o programador Rua Vergueiro, 3185 - 8º andar
Casa do Código
Prefácio
Neste livro trataremos do Spring, um framework usado no desenvolvimento de apli-cações corporativas baseado nos conceitos de inversão de controle, injeção de depen-dências e AOP. São palavras que muitas vezes soam alienígenas e muitas vezes não adquirem signi�cado na mente do desenvolvedor. Este livro possui dois objetivos: clari�car o signi�cado por trás destes conceitos e expor como sua aplicação acaba por gerar sistemas de qualidade superior, mais fáceis de manter e que, com isto, acabam por aumentar o valor agregado do nosso trabalho.
Mais que um framework para desenvolvimento de aplicações corporativas, vejo o Spring como uma ferramenta disciplinadora. Conforme o desenvolvedor vai se ha-bituando ao seu modo de trabalho começa a valorizar ainda mais qualidades como uma melhor modularização do sistema, escrita de código mais simples, reaprovei-tamento de código legado e tecnologias já existentes, além da criação de interfaces mais signi�cativas. No Spring podemos ver de forma nítida o núcleo da arquitetura de sistemas que é justamente o modo como componentes de so�ware interagem en-tre si de uma maneira explícita. Para os que anseiam trilhar este caminho, é também um auxílio em sua formação.
O livro é dividido em duas partes. Na primeira tratamos dos conceitos em que se baseia o Spring. Veremos o que motivou sua criação, o que o framework trouxe de ganho para o desenvolvimento de aplicações corporativas e como são aplicados no núcleo do Spring que é seu container de inversão de controle/injeção de depen-dências. Com isto é fornecida ao leitor uma base sólida que pode ser aplicada tanto dentro quanto fora do contexto do Spring.
Na segunda parte temos uma abordagem mais mão na massa. Veremos aplica-ções do framework em situaaplica-ções reais do dia a dia, como por exemplo na camada de persistência, controle transacional, segurança e também criaremos uma aplicação web real baseada no Spring MVC. A grosso modo, pode-se dizer que quando escrevi a primeira parte do livro incluí o conteúdo que gostaria muito de ter aprendido na i
Casa do Código faculdade, enquanto na segunda estão as informações que teriam me poupado muito tempo no meu cotidiano como desenvolvedor.
A quem se destina
Este livro se destina a todos aqueles que já possuem algum conhecimento da pla-taforma Java, que já terão uma bagagem mais rica para entender o que tento explicar neste texto. Caso não seja o seu caso, tudo bem: os três primeiros capítulos contém o conceitual que você poderá aplicar em práticamente qualquer plataforma.
Agradecimentos
Agradeço à con�ança e ao apoio (isto sem mencionar a paciência!) dos meus editores Paulo Silveira e Adriano Almeida sem os quais este livro não seria possí-vel. Claro que eles não agiram sozinhos, Nanna - minha esposa - é fundamental por ter conseguido me aguentar neste processo de tradução do Springolês para o Portu-guês. Também preciso agradecer aos meus colegas, em especial ao Matheus Eduardo Moreira e o Felipe Zampa.
Os leitores tiveram participação extremamente importante: após o lançamento da versão beta �quei maravilhado com a quantidade de pessoas interessadas neste material, o que me motivou a concluí-lo mais rápido e com a melhor qualidade pos-sível. Alguns entraram em contato direto comigo com dicas e sugestões, e a estes ofereço meu agradecimento especial: Renan Reis, Rodrigo Monteiro, Adriano Faria Alves e Willardy Tyrone de Oliveira. E ei, também não posso deixar de agradecer ao apoio do Rodrigo Fernandes Moreira e Gabriela Corrêa da Eteg. Finalmente, para evitar que eu sofra consequências imprevisíveis, à minha mãe, Selma Weissmann. Infelizmente o espaço deste prefácio é limitado para conter todas as pessoas a quem devo agradecer, assim como minha memória. Caso seu nome me tenha escapado, por favor desculpe este mal agradecido: com certeza encontrarei alguma forma de retribuí-lo no futuro ok?
Muito obrigado a todos vocês.
Casa do Código Sumário
Sumário
Os conceitos por trás do Spring �
� Lide com o alto acoplamento de forma elegante �
�.� Problema essencial: acoplamento . . . �
�.� A famigerada inversão . . . ��
� Conheça o Spring Framework ��
�.� Por que criaram o Spring? . . . ��
�.� O Mundo dos objetos em ���� . . . ��
�.� Os problemas do EJB em ���� . . . ��
�.� Alternativas começam a surgir: IoC/DI e AOP . . . ��
�.� Container: o sujeito que torna tudo isto possível . . . ��
�.� Do início ao �m de um objeto, entenda o ciclo de vida . . . ��
�.� Spring em partes . . . ��
�.� O Container . . . ��
�.� Trabalhando com AOP e Aspects . . . ��
�.�� Instrumentação de código . . . ��
�.�� Acesso a dados e integração . . . ��
�.�� Aplicações na Web com o Spring . . . ��
�.�� E ainda mais componentes!. . . ��
�.�� Resumindo . . . ��
� Conhecendo o Container ��
�.� Preparando seu ambiente de desenvolvimento. . . ��
�.� Nosso sistema de exemplo . . . ��
�.� Declarando beans . . . �� iii
Sumário Casa do Código
�.� Instanciação por factory method . . . ��
�.� Mapeando atributos complexos . . . ��
�.� Usando o container . . . ��
�.� O ciclo de vida do container . . . ��
�.� Escopos . . . ��
�.� Instanciação tardia. . . ��
�.�� Aproveitando o ciclo de vida dos beans . . . ��
�.�� Quando o bean conhece seu container . . . ��
�.�� Modularizando a con�guração. . . ��
�.�� Aplicando herança na de�nição dos beans . . . ��
�.�� Spring Expression Language (SpEL). . . ��
�.�� Resumindo . . . �� � Minimizando o XML com autowiring, anotações e Java ��
�.� Autowiring: automatizando a injeção de dependências. . . ��
�.� Vantagens e limitações da injeção automática . . . ��
�.� Facilitando ainda mais com Anotações . . . ��
�.� Con�guração programática com Java . . . ��
�.� XML, anotações ou con�guração programática? . . . �� � AOP: adicionando novos comportamentos aos beans ��
�.� Como identi�car os interesses transversais . . . ��
�.� Entendendo AOP . . . ��
�.� Preparando o ambiente de desenvolvimento . . . ���
�.� A implementação do primeiro aspecto . . . ���
�.� Entenda os advices. . . ���
�.� Use os around advices . . . ���
�.� Use o advice before . . . ���
�.� E onde entra o Proxy nessa história? . . . ���
�.� Entenda a execução . . . ���
�.�� Um uso interessante para AOP: Log de erros. . . ���
�.�� Declare aspectos com anotações AspectJ e esquemas XML . . . ���
�.�� A sintaxe AspectJ de declaração de point cuts . . . ���
�.�� Concluindo com um resumão conceitual. . . ��� iv
Casa do Código Sumário
Spring Framework na prática ���
� Colocando a mão na massa ���
�.� Obtendo o código fonte . . . ���
�.� Con�gure seu ambiente de desenvolvimento. . . ���
�.� O que vêm por ai. . . ���
� Acesso a dados ���
�.� DAO: no centro da mentalidade Spring. . . ���
�.� Conecte-se ao banco de dados . . . ���
�.� De volta ao DAO: o problema com as exceções . . . ���
�.� Templates: acabe com o código repetido . . . ���
�.� O trabalho com JDBC. . . ���
�.� O trabalho com o Hibernate . . . ���
�.� Integre com a JPA . . . ���
�.� Concluindo . . . ���
� Desenvolva aplicações web com Spring MVC ���
�.� O que iremos desenvolver . . . ���
�.� A base para tudo: MVC . . . ���
�.� Iniciando o Projeto . . . ���
�.� Dispatcher Servlet: o maestro por trás do Spring MVC. . . ���
�.� Olá mundo com Spring MVC . . . ���
�.� O primeiro controlador útil do Spring Fórum . . . ���
�.� Autenticando usuários: como redirecionar e lidar com a sessão HTTP���
�.� De�nindo qual método HTTP usar . . . ���
�.� Recebendo parâmetros de entrada. . . ���
�.�� O que é aquele “redirect:/” retornado pela action login? . . . ���
�.�� Como lidar com a sessão do usuário e a classe ModelAndView . . . . ���
�.�� Cadastrando usuários: submissão de formulários . . . ���
�.�� Submetendo o formulário de cadastro . . . ���
�.�� Melhorando a camada de visualização com o Tiles . . . ���
�.�� Lidando com conteúdo estático . . . ���
�.�� Ainda há mais de SpringMVC por vir. . . ��� v
Sumário Casa do Código
� Ações recorrentes com o SpringMVC ���
�.� Faça a validação de formulários com o Hibernate Validator . . . ���
�.� Envie seus avatares para o servidor com upload de arquivos. . . ���
�.� De�na o corpo da resposta . . . ���
�.� Faça requisições assíncronas com AJAX . . . ���
�.� Concluindo com uma surpresa . . . ���
�� Gerenciando transações ���
��.� Entendendo as transações . . . ���
��.� As políticas transacionais . . . ���
��.� Preparando o ambiente de desenvolvimento . . . ���
��.� Como o Spring implementa o suporte a transações . . . ���
��.� Transações programáticas . . . ���
��.� Declarando transações . . . ���
��.� Concluindo . . . ��� �� Protegendo nossa aplicação com Spring Security ���
��.� Entendendo autenticação e autorização. . . ���
��.� Os módulos do Spring Security . . . ���
��.� Con�gurando os �ltros de acesso . . . ���
��.� Con�gurando o contexto do Spring . . . ���
��.� O formulário de login . . . ���
��.� Escrevendo um provedor de autenticação . . . ���
��.� Usando SpEL . . . ���
��.� Protegendo invocação de métodos em beans. . . ���
��.� Tags . . . ��� ��.�� Conclusão. . . ��� �� E ai, gostou? ��� Bibliogra�a ��� Versão: ��.�.�� vi