10

© 2013, Casa do Código · a primeira parte do livro incluí o conteúdo que ... ofereço meu agradecimento especial: Renan Reis ... .Concluindo com um resumão

  • Upload
    hakhanh

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

© 2013, Casa do CódigoTodos 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ódigoLivros para o programadorRua Vergueiro, 3185 - 8º andar04101-300 – Vila Mariana – São Paulo – SP – Brasil

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ãoadquirem 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 porgerar sistemas de qualidade superior, mais fáceis de manter e que, com isto, acabampor aumentar o valor agregado do nosso trabalho.

Mais que um framework para desenvolvimento de aplicações corporativas, vejoo Spring como uma ferramenta disciplinadora. Conforme o desenvolvedor vai se ha-bituando ao seu modo de trabalho começa a valorizar ainda mais qualidades comouma 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 interfacesmais signi�cativas. No Spring podemos ver de forma nítida o núcleo da arquiteturade sistemas que é justamente o modo como componentes de so�ware interagem en-tre si de umamaneira explícita. Para os que anseiam trilhar este caminho, é tambémum auxílio em sua formação.

O livro é dividido em duas partes. Na primeira tratamos dos conceitos em quese baseia o Spring. Veremos o que motivou sua criação, o que o framework trouxede ganho para o desenvolvimento de aplicações corporativas e como são aplicadosno 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 tantodentro quanto fora do contexto do Spring.

Na segunda parte temos uma abordagem mais mão na massa. Veremos aplica-ções do framework em situações reais do dia a dia, como por exemplo na camadade persistência, controle transacional, segurança e também criaremos uma aplicaçãoweb real baseada no SpringMVC. A grosso modo, pode-se dizer que quando escrevia 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 teriamme poupadomuitotempo 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 bagagemmais rica para entender o que tento explicarneste texto. Caso não seja o seu caso, tudo bem: os três primeiros capítulos contémo 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 meuseditores 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 porter 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 aoMatheus EduardoMoreira e o Felipe Zampa.

Os leitores tiveram participação extremamente importante: após o lançamentoda versão beta �quei maravilhado com a quantidade de pessoas interessadas nestematerial, 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 estesofereço meu agradecimento especial: Renan Reis, Rodrigo Monteiro, Adriano FariaAlves e Willardy Tyrone de Oliveira. E ei, também não posso deixar de agradecer aoapoio do Rodrigo Fernandes Moreira e Gabriela Corrêa da Eteg. Finalmente, paraevitar 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 quemdevo agradecer, assim como minha memória. Caso seu nome me tenha escapado,por favor desculpe este mal agradecido: com certeza encontrarei alguma forma deretribuí-lo no futuro ok?

Muito obrigado a todos vocês.

ii

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? . . . . . . . . . . . . . . . . . . . . . . . . . ���.� OMundo 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