Академический Документы
Профессиональный Документы
Культура Документы
O Spring emAo umdestes raros livros que interligamummanual sobre o uso de determinado software
com mlti plas idias sobre bons designs de programa e padres. Realmente gostei deste livro...
Computing Reviews
Cobre todas as bases com inmeros exemplos e instrues explcitas... um manual de referncias e
instrues muito bem organizado e escrito de maneira fluente.
Internet Bookwatch
... fcil de ler... e com um bocado de humor para ajudar...
Books-On-Line
Ainda que a documentao de referncia de Spring seja de excelente qualidade, este livro torna
a aprendizagem muito mais agradvel, pois injeta a quantidade exata de humor que proporciona
entretenimento. Se quiser aprender Spring,este o caminho.
Bill Siggelkows Weblog
Autor de Jakarta Struts Cookbook
Uma grande fonte de pesquisa confivel... O livro define de maneira clara o poder que o Spring
proporciona aos desenvolvedores e como esse abstrai muito dos servios J2EE mais pesados que a maioria
das aplicaes srias usa. Esse livro foi desenvolvido atravs de um rigoroso programa de acesso prvio,
por isso erros de cdigo e de gramtica felizmente no existem. Para mim,no h nada pior do que
tentar aprender uma nova tecnologia a partir de um texto mal-escrito ou de um livro tcnico maleditado. Felizmente Craig,Ryan e equi pe da Manning tiveram o cuidado nos detalhes e produziram
um livro que recomendo muito.
JavaLobby.org
Um manual de referncia completo que aborda quase todos os aspectos de Spring. E sem complicaes:
cada explicao clara e h vrios exemplos de cdigo. ...Explica de maneira fcil o que Injeo
de Dependncia e AOP significam, bem como Spring os torna possveis. ...como possvel escrever
servios e Daos,alm de implementar de maneira simples gerenciamento de transao e remotabilidade
de servios. ...a terceira parte trata da camada da web que abrange Spring MVC bem como outras
tecnologias e frameworks. ...Um excelente recurso para todo desenvolvedor interessado em usar Spring
em seu projeto.
Java User Group Milano
ii
Spring em Ao
vi
Spring em Ao
contedo resumido
Parte 1
Parte 2
25
57
91
123
175
197
243
Part 3
10
11
12
307
337
351
14
15
16
389
Apndice B
463
531
Apndice A
425
541
497
Sumrio
Prefcio xv
Prefcio para a Primeira Edio xvii
Agradecimentos xix
Sobre este livro xx
Sobre o ttulo xxiv
Sobre a ilustrao de capa xxv
Parte 1
12
19
24
33
29
34
39
viii
Spring em Ao
53
56
60
66
67
69
4
4.1
89
93
Autoproxying 109
Como criar autoproxies para aspectos do Spring
Autoproxying de aspectos @AspectJ 110
119
117
113
110
104
96
88
138
173
178
185
ix
182
182
Spring em Ao
189
195
198
217
239
242
244
249
254
258
272
277
10
306
311
325
11
336
339
xii
Spring em Ao
343
343
12
350
358
360
355
365
380
386
13
392
423
422
407
14
429
436
15
449
456
460
469
479
16
493
495
xiv
Spring em Ao
529
531
541
563
Contedo da web (Os tpicos seguir esto disponveis em ingls no site: www.altabooks.com)
Captulo da web Construo de aplicaes portlet
Apndice C
Apndice D
Apndice E
Apndice F
Prefcio
Eu estava ao lado de um centro de convenes de um amplo hotel, em Miami Beach, Flrida,
no dia 7 de dezembro de 2005. O centro estava lotado de desenvolvedores de todos os
lugares do mundo, que tinham invadido as lindas areias das praias do sul da Flrida com
um nico propsito: falar sobre Spring.
Que posso dizer? Era uma sala cheia de nerds. Em lugar de surf e bronzeados ao sol, nos
juntamos para nos aquecer no brilho morno das telas de nossos laptops, para aprender
mais sobre nosso querido framework, do qual cada um sabe mais que o outro.
Naquela noite em particular, espervamos as palavras do criador do Spring, Rod Johnson,
que apresentou a palestra de abertura da conferncia. Ele falou sobre a origem do Spring e
o sucesso que tinha obtido. A seguir, convidou alguns membros da equipe do Spring para
o palco para apresentar as novas funcionalidades que estariam na prxima verso.
No havia avanado muito na apresentao quando Rod pediu que todos prestassem
muita ateno. Todos ficamos na expectativa de excelentes novas funcionalidades a serem
disponibilizadas no Spring 1.3, a suposta nova verso. Para nossa grande surpresa, Rod
nos disse que no haveria Spring 1.3; a prxima verso seria Spring 2.0.
A deciso de aumentar o nmero principal da verso do prximo lanamento no tomada
de forma leviana. Tal ao denota um avano significativo em Spring. Se a prxima verso
seria 2.0, ento podamos esperar melhorias principais. De fato, dez meses mais tarde, o
Spring 2.0 foi lanado com uma abundncia de novas habilidades, incluindo:
Configurao de XML simplificada e a opo de criar elementos personalizados
de configurao
AOP e transaes muito simplificadas
Suporte para anotaes Java 5 para declarar aspectos, transaes e propriedades
exigidas do bean
A habilidade para criar beans a partir de scripts escritos em JRuby, Groovy ou
Bean-Shell
Novos modelos JDBC para dar suporte a parmetros nomeados e recursos Java 5
Suporte aprimorado para JMS, incluindo recebimento de mensagens de maneira
no-sincronizada (para a criao de POJOs dirigidos a mensagens)
Uma nova biblioteca de tags JSP para binding de formulrios
Diversas melhorias em configurao sobre conveno para reduzir a quantidade
de XML exigido para configurar Spring
Suporte para Java Persistence API (JPA)
Definio aprimorada de bean, incluindo delimitao de pedido e seo de beans
para aplicaes da web
A habilidade para executar injeo de dependncia sobre objetos que o Spring
no cria (como objetos de domnio)
Em certo ponto de sua apresentao, Rod disse que se a profuso de novos recursos a serem
introduzidos no justificava o salto para 2.0, como poderiam estar aptos para justificar o
lanamento 2.0?
xv
xvi
Spring em Ao
Isto no era tudo. Alm do trabalho feito no ncleo de Framework Spring, vrios projetos
interessantes relacionados com o Spring estavam por trs para fornecer habilidades
adicionais. Entre elas:
Spring Web Flow, que tem base no Spring MVC e permite o desenvolvimento de
aplicaes da web com base em fluxos
XFire, para exportar seus beans do Spring como servios da web SOAP
Spring-WS para criar servios da web com contratos pr-definidos
Spring Modules, que fornece (entre outras coisas) realizao de cache declarativo
e validao
Direct Web Remoting (DWR) para beans do Spring habilitados por Ajax
Lingo, que torna possvel invocar de maneira no-sincronizada mtodos sobre bean
remotos
Ento tive a seguinte idia: se todos esses novos avanos no justificavam uma segunda
edio do Spring em Ao, o que justificaria? Descobri que a Manning estava pensando a
mesma coisa.
E agora, depois de um ano, aqui est a to esperada atualizao do Spring emAo, que abrange
muitos dos novos recursos do Spring 2.0. Esse trabalho foi um pouco mais longo do que
havia planejado, mas espero que tenha valido a pena esperar. Meu objetivo para esta edio
o mesmo da primeira: compartilhar a alegria de desenvolver em Spring. Espero que este
livro sirva para reforar seu prazer em Spring.
xvii
xviii
Spring em Ao
Tudo isso mudou l pelo ano passado, quando descobrimos o notvel potencial corporativo
de Spring e Hibernate. Entre esses dois frameworks, quase todas as nossas necessidades de
camadas intermedirias e de dados foram correspondidas.
Primeiro adotamos o Hibernate. Era a ferramenta de mapeamento de objeto/relacional
mais intuitiva e rica em recursos por a afora. Mas foi ao adotar o Spring que realmente
conseguimos com que o nosso cdigo parecesse bom. Com a injeo de dependncia
do Spring conseguimos nos livrar de todos os nossos fabricantes e configuradores
personalizados. De fato, esta foi a razo pela qual integramos em primeiro lugar o Spring
em nossas aplicaes. Sua conexo permitiu-nos modernizar a configurao de nossas
aplicaes e abandonar as solues domsticas. (Hei, todo o desenvolvedor gosta de escrever
seu prprio framework. Mas algumas vezes voc precisa simplesmente renunciar a isto!)
Rapidamente descobrimos um excelente bnus: o Spring tambm fornecia integrao
bastante fcil com o Hibernate. Isto nos permitiu descartar nossas classes de integrao
personalizadas do Hibernate e usar o suporte do Spring em seu lugar. Por sua vez, conduziunos diretamente ao suporte do Spring para persistncia transparente.
Observe atentamente e voc ver um padro aqui. Quanto mais usvamos Spring, mais
descobramos novos recursos. E cada recurso descoberto era um prazer de se trabalhar.
Seu framework MVC web funcionava perfeitamente com algumas aplicaes. Seu suporte
para AOP foi til em diversos lugares, principalmente na segurana. O suporte a JDBC foi
bastante apropriado para alguns programas menores. Ah, claro, tambm o usamos para
o planejamento. E acesso a JNDI. E integrao de e-mail. Quando isto atinge os pontos
principais do desenvolvimento, o Spring ganha de goleada.
Gostamos tanto do Spring que decidimos que algum deveria escrever um livro sobre ele.
Felizmente, um de ns j havia escrito um livro para a Manning e sabia como ir adiante neste
tipo de coisa. Logo aquela expresso algum deveria escrever um livro tornou-se ns. Ao
assumir este projeto, tentamos divulgar a palavra divina do Spring. O framework Spring
trouxe-nos somente satisfao ao trabalhar com ele prevemos que o mesmo ocorrer com
voc. E esperamos que este livro seja um agradvel veculo para voc atingir esse ponto.
Agradecimentos
Uau! Levou muito mais tempo para fazer este livro do que pensei que levaria. Mas no havia outra
maneira de voc estar com esse exemplar nas mos se no fosse a ajuda, inspirao e estmulo de
todo o pessoal por trs dos panos.
Em primeiro lugar, gostaria de agradecer s almas trabalhadoras da Manning que milagrosamente transformaram o meu manuscrito escrito de maneira negligente na fina pea de literatura de programao
que chega at voc: Marjan Bace, Mary Piergies, Cynthia Kane, Dottie Marsico, Karen Tegtmeyer, Leslie
Haimes, Liz Welch, Gabriel Dobrescu, Ron Tomich, Kerri Bonasch, Jackie Carter, Frank Blackwell,
Michael Stephens e Benjamin Berg.
Tambm gostaria de agradecer aos revisores que dependeram tempo para fornecer o feedback e a
crtica necessria para dar forma a este livro: Doug Warren, Olivier Jolly, Matthew Payne, Bill Fly,
Jonathon Esterhazy, Philip Hallstrom, Mark Chaimungkalanont, Eric Raymond, Dan Allen, George
M. Jempty, Mojahedul Hasanat, Vlad Kofman, Ashik Uzzaman, Norman Richards, Jeff Cunningham,
Stuart Caborn, Patrick Dennis, Bas Vodde e Michael Masters. Alm disso, Erik Weibust e Valentin
Crettaz fizeram uma segunda reviso tcnica do manuscrito, um pouco antes de ser publicado.
E h aquelas pessoas que no trabalharam diretamente no livro, mas que nem por isso deixaram de
causar impacto sobre mim ou em como esse livro foi produzido.
A minha melhor amiga, esposa amante e a mulher mais bonita do mundo, Raymie. Muito obrigado
por sua eterna pacincia em outro projeto de livro que parecia no ter mais fim. Desculpe se demorou tanto. Agora que acabou, prometo-lhe mais flores e encontros. E quem sabe algum trabalho
no jardim.
s minhas doces e adorveis garotinhas, Maisy e Madison: Obrigado pelos abraos, risadas e intervalos
que me proporcionaram uma pausa agradvel do livro.
A Ryan Breidenbach, meu co-autor na primeira edio: Muito obrigado por me ajudar no incio e
pelo seu feedback na segunda edio.
equipe do Spring: Nenhuma parte desse livro seria possvel (ou mesmo necessria) sem a viso de vocs
e a determinao em criar um framework to impressionante. Gostaria de agradecer especialmente a
Rod Johnson e Colin Sampaleanu por seus comentrios no meu blog e nas sees IM que ajudaram a
guiar meu pensamento, assim como Arjen Poutsma pela reviso do captulo sobre Spring-WS.
A todos os meus colegas de trabalho durante os ltimos anos: aprendi muitas coisas preciosas trabalhando
ao lado de vocs e no posso deixar de agradecer pelo seu profissionalismo, dedicao e amizade: Jeff
Hanson, Jim Wallace, Don Beale, Van Panyanouvong, James Tikalsky, Ryan Breidenbach, Marianna
Krupin, Tonji Zimmerman, Jeff Wellen, Chris Howard, Derek Lane, Tom McGraw, Greg Vaughn, Doug
Warren, Jon West, Peter Presland-Byrne, Ravi Varanasi, Srinivasa Penubothu, Gary Edwards, Greg
Helton, Jacob Orshalick, Valerie Crowley, Tyler Osborne, Stephanie Co, Maggie Zhuang, Tim Sporcic,
William Johnson, John Moore, Brian Eschbach, Chris Morris, Dave Sims, Andy Cline, Bear Cahill, Greg
Graham e Paul Nelson.
Um muito obrigado tambm a todos meus outros amigos, colegas, nerds da mesma categoria, pessoas
que encontrei em conferncias, membros da minha lista LinkedIn, que me subornaram para terem
seus nomes nos agradecimentos: James Bell, Daniel Brookshier, Scott Davis, Ben Galbraith, Bill Fly,
Justin Gehtland, Pete Gekas, Robert Gleaton, Stu Halloway, Erik Hatcher, Rick Hightower, Ramnivas
Laddad, Guillaume Laforge, Crazy Bob Lee, Ted Neward, Matt Raible, Leo Ramirez, Arun Rao, Norman Richards, Chris Richardson, James Strachan, Bruce Tate, Glenn Vanderburg, Becca Wheeler e
Jay Zimmerman.
E, finalmente minha gratido infinita ao Jack Bauer por salvar o mundo, 24 horas de cada vez.
xix
xx
Spring em Ao
Guia geral
Spring em Ao - Segunda Edio est dividido em trs partes, alm de dois apndices. Cada
uma das trs partes enfoca uma rea do Framework Spring: o ncleo do framework, as
camadas de negcio e de dados, alm da camada de apresentao. Embora cada parte se
baseie na seo anterior, cada qual pode tambm atuar individualmente, permitindo que
voc mergulhe de cabea em um determinado tpico sem ter de partir do princpio. Na parte
1, voc explorar os dois recursos centrais do framework Spring: injeo de dependncia
(DI) e programao orientada a aspecto (AOP). Isto dar a voc uma boa compreenso dos
fundamentos do Spring a serem utilizados ao longo do livro.
No captulo 1, voc ser apresentado DI e AOP, e como elas so usadas para facilitar o
desenvolvimento de aplicaes em Java.
O captulo 2 d uma viso mais detalhada sobre como configurar seus objetos de aplicao,
usando injeo de dependncia. Voc aprender a escrever componentes de baixo
acoplamento e associar suas dependncias e propriedades dentro do container do Spring
usando XML.
Assim que entender o bsico sobre associao de beans, voc estar pronto para ver algo dos
recursos mais avanados do container do Spring no captulo 3. Entre outras coisas, aprender
como atrelar ao ciclo de vida de seus componentes de aplicao, criar relacionamentos de
pai/filho entre as configuraes de seus beans, e associar em componentes script escritos
em Ruby e Groovy.
O captulo 4 explora o uso da AOP do Spring para desacoplar propriedades transversais a
partir de objetos aos quais servem. Este captulo tambm prepara a cena para os captulos
posteriores, em que voc usar AOP do Spring para fornecer servios declarativos, como
transaes, segurana e realizao de cache.
A Parte 2 baseia-se nos recursos da DI e da AOP apresentados na parte 1 e mostra como
aplicar esses conceitos s camadas de negcio e de dados de sua aplicao.
O captulo 5 abrange o suporte do Spring para persistncia de dados. Voc ser apresentado
ao suporte a JDBC do Spring, que ajudar a remover muito cdigo repetitivo associado a
JDBC. Voc tambm ver como o Spring integra-se a diversos frameworks de persistncia
populares como Hibernate, iBATIS e Java Persistence API (JPA).
O captulo 6 complementa o anterior, mostrando-lhe como assegurar integridade em seu
banco de dados usando o suporte de transaes do Spring. Voc ver como o Spring utiliza
a AOP para oferecer a objetos de aplicao simples a capacidade de transaes declarativas.
No captulo 7 voc aprender como oferecer segurana para suas aplicaes usando Spring
Security. Ver como Spring Security assegura a aplicao no nvel de solicitao da web,
usando filtros servlet, e no nvel de mtodo, usando a AOP do Spring.
O captulo 8 explora como expor seus objetos de aplicao como servios remotos. Voc
aprender a acessar servios remotos de forma transparente como se fossem qualquer outro
objeto em sua aplicao. As tecnologias remotas exploradas incluem RMI, Hessian/Burlap,
servios da web com base em SOAP, alm do prprio HttpInvoker do Spring.
Ainda que o captulo 8 aborde servios da web em Spring, o captulo 9 d uma viso
diferente destes, examinando o projeto Spring-WS. Neste captulo voc aprender como
usar Spring-WS para desenvolver servios da web com contrato pr-definido em que o
contrato desacoplado a partir de sua implementao. O captulo 10 examina o Spring
para enviar e receber mensagens no-sincronizadas com JMS. Alm de operaes bsicas
JMS com Spring, voc aprender tambm como usar o projeto de cdigo aberto Lingo
para expor e consumir servios remotos no-sincronizados em JMS.
Embora Spring elimine muitas das necessidades para EJBs, voc pode precisar usar Spring e
EJB juntos. Dessa forma, o captulo 11 explora como integrar Spring com EJB. Voc aprender
como escrever EJBs habilitados para Spring, como associar referncias EJB em seu contexto de
aplicao Spring, e at como usar anotaes tipo EJB para configurar seus beans do Spring.
Terminada a parte 2, o captulo 12 lhe mostrar como usar o Spring para agendar tarefas,
enviar e-mails, acessar recursos configurados para JNDI e gerenciar objetos de sua aplicao
com JMX.
A parte 3 move a discusso do Spring um pouco mais prximo do usurio final, vendo os
modos de usar Spring para desenvolver aplicaes da web.
O captulo 13 apresenta o prprio framework web MVC do Spring. Voc descobrir como o Spring
pode ligar de forma transparente parmetros web aos seus objetos de negcios, e proporcionar
controle de erros e validao ao mesmo tempo. Ver tambm o quo fcil acrescentar
funcionalidade s suas aplicaes web, usando o rico conjunto de controles Spring.
Continuando de onde o 13 parou, o captulo 14 abrange a camada de viso do MVC Spring.
Neste captulo, voc aprender como mapear a produo de um controlador MVC Spring
para um componente de visualizao especfica para renderizar o usurio. Voc ver como
definir visualizaes de aplicao usando JSP, Velocity, FreeMarker e Tiles. Aprender tambm
como criar uma sada no-HTML como PDF, Excel e RSS, a partir de MVC Spring.
O captulo 15 explora o Spring Web Flow, uma extenso para MVC Spring que habilita o
desenvolvimento de aplicaes web conversacionais. Neste captulo voc aprender como
desenvolver aplicaes da web que guiaro o usurio atravs de um fluxo especfico.
Finalmente, o captulo 16 mostrar como integrar Spring a outros frameworks web. Se voc
xxi
xxii
Spring em Ao
j tiver feito um investimento em outro framework web (ou apenas prefere outro), este
captulo para voc. Ver como o Spring fornece suporte para diversos dos mais populares
frameworks web, incluindo Struts, WebWork, Tapestry e JavaServer Faces (JSF).
O Apndice A far voc iniciar sua aplicao, mostrando como baixar e configurar o Spring
em Ant ou em Maven 2.
Um dos benefcios-chave de baixo acoplamento que facilita o teste de unidade dos objetos
de sua aplicao. O Apndice B mostra como tirar vantagem da injeo de dependncia e
de algumas classes orientadas a teste do Spring para testar suas aplicaes.
Finalmente, embora este livro no esteja exclusivamente focalizado em aplicativos web, uma
boa parte dele dedicada a este tpico. De fato, os quatro captulos finais demonstram como
o Spring pode dar suporte para o desenvolvimento da camada web de seus aplicativos. Se
voc for um desenvolvedor de aplicativos web, considerar especialmente valiosa a ltima
parte deste livro.
Convenes de cdigo
H diversos exemplos de cdigos neste livro. Esses exemplos aparecero sempre numa
fonte de cdigo especfica. Se houver uma parte do exemplo que desejamos que voc
preste ateno extra, ela aparecer numa fonte de cdigo com negrito. Todos os nomes de
classe, nome de mtodo ou fragmento de XML dentro do texto normal do texto aparecer
em fonte de cdigo especfico tambm.
Muitas classes e pacotes do Spring tm nomes excepcionalmente longos (mas expressivos).
Por causa disto, podem ser includos marcadores de continuao de linha () quando
necessrio.
Nem todos os exemplos de cdigo neste livro esto completos. Geralmente mostramos
apenas um ou dois mtodos de uma classe para focalizar um tpico em particular.
O cdigo-fonte completo para a aplicao encontrado no livro pode ser baixado do web site da
editora Altabooks em www.altabooks.com.br ou em www.manning.com/SpringinAction.
Sobre o autor
Craig Walls um desenvolvedor profissional de software com mais de 13 anos de experincia
e co-autor do XDoclet in Action (Manning, 2003). um vido defensor do Framework Spring,
dando freqentes palestras e conferncias para grupos de usurios locais e escrevendo
sobre Spring em seu blog. Quando no est criando cdigo, Craig passa sempre que pode
o tempo com sua esposa, duas filhas, seis pssaros, quatro ces, dois gatos e um nmero
sempre flutuante de peixes tropicais. Craig vive em Denton, Texas.
Author On-line
A aquisio do Spring em Ao inclui livre acesso a um frum web privado (em ingls) mantido
pela Manning Publications em que voc pode fazer comentrios sobre o livro, propor
questes tcnicas e receber ajuda dos autores e de outros usurios. Para acessar o frum
e inscrever-se entre em www.manning.com/ walls3 ou www.manning.com/SpringinAction.
Esta pgina fornece as informaes sobre como conseguir acessar o frum, uma vez que
voc esteja registrado, que tipo de ajuda est disponvel e as regras de conduta.
O compromisso da Manning com seus leitores fornecer um foro em que um dilogo
significativo possa ter lugar entre leitores individuais e entre leitores e o autor. No h um
compromisso para qualquer quantidade especfica de participaes por parte do autor,
cuja contribuio no frum permanece voluntria (e no-remunerada). Sugerimos que
voc tente propor ao autor algumas questes desafiadoras para que o interesse dele no
se disperse!
O frum Author On-line e os arquivos dos debates anteriores estaro acessveis no site da
web da editora enquanto o livro (em ingls) estiver em circulao.
xxiii
xxiv
Spring em Ao
Sobre o ttulo
Combinando apresentaes, aspectos gerais e exemplos prticos, os livros da srie Em Ao
so projetados para ajudar no aprendizado e na recapitulao. De acordo com pesquisas
em cincia cognitiva, as coisas das quais as pessoas se recordam so aquelas que descobriram
durante explorao automotivada.
Embora ningum na Manning seja um cientista cognitivo, estamos convencidos de que,
para o aprendizado se tornar permanente, deve passar pelos estgios de explorao,
execuo e, de forma interessante, recapitulao do que est sendo aprendido. As pessoas
compreendem e relembram coisas novas, o que quer dizer que as assimilaram somente
aps explor-las ativamente. O homem aprende em ao. Parte essencial de um guia Em
Ao sua orientao atravs de exemplos. Isso incentiva o leitor a tentar algo alm, a
experimentar novos cdigos e a explorar novas idias.
Existe uma outra e mais trivial razo para o ttulo deste livro: nossos leitores so pessoas
ocupadas. Usam nossos livros para fazer uma tarefa ou resolver um problema. Precisam
de livros que lhes permitam avanar e retroceder facilmente na leitura, e aprender apenas
o que quiserem e quando quiserem. Precisam de livros que os auxiliem em ao. Os livros
desta srie so projetos para tais leitores.
xxv
26
Spring em Ao
Parte 1
Elementos Essenciais do Spring
O
Spring faz muitas coisas, mas quando voc o separa em partes centrais, os
recursos principais do Spring so injeo de dependncia (DI) e programao
orientada a aspecto (AOP). Iniciando no captulo 1, Como colocar Spring em
ao, voc ter uma rpida viso geral de DI e AOP em Spring e ver como
podem ajud-lo a desacoplar objetos de aplicativo.
No captulo 2, Associao bsica de bean, daremos um olhar mais detalhado
em como manter os objetos de seu aplicativo com baixo acoplamento usando
DI. Voc aprender como definir os objetos de seu aplicativo e como associlos com dependncias no container do Spring usando XML.
Revelando um furo no captulo 3, Associao avanada de bean, exploraremos
alguns dos recursos mais avanados do container e veremos como usar algumas
das tcnicas mais poderosas de configurao do Spring.
O captulo 4, Como advertir beans, explora como usar os recursos AOP do
Spring para desacoplar servios globais de sistema (como segurana e auditoria)
a partir dos objetos aos quais servem. Este captulo estabelece o estgio para
os captulos 6 e 7, em que voc aprender como usar a AOP do Spring para
fornecer transaes declarativas e de segurana.
CAPTULO 1
Como colocar o Spring em ao
27
28
Spring em Ao
CAPTULO 1
Como colocar o Spring em ao
29
Spring um framework de cdigo aberto, criado por Rod Johnson e descrito em seu livro,
Expert One-on-One: J2EE Design e Development. Foi criado para lidar com a complexidade de
desenvolvimento de aplicativos corporativos. O Spring torna possvel usar simples JavaBeans
para conseguir coisas que antes s eram possveis com EJBs. Porm, a utilidade do Spring
no limitada ao desenvolvimento do lado do servidor. Qualquer aplicativo em Java pode
se beneficiar do Spring em termos de simplicidade, testabilidade e baixo acoplamento.
OBSERVAO: Para evitar ambigidade, ser usado o termo bean quando se referir
ao JavaBeans convencional e EJB quando for JavaBeans Enterprise.
Eventualmente tambm ser usado o termo POJO (plain-old Java object).
O Spring faz muitas coisas, mas quando as partes de sua base so dissecadas, um leve
framework e container orientado a aspecto, com injeo de dependncia. Parece pouco, mas
resume o objetivo central do Spring. Para isso fazer sentido, leia as descries abaixo:
Container leve O Spring um framework leve, em termos de tamanho e sobrecarga.
O Framework Spring inteiro pode ser distribudo em um nico arquivo JAR com no
mximo 2.5 MB. E a sobrecarga de processamento exigida pelo Spring desprezvel.
Alm disso, o Spring no invasivo: os objetos de um aplicativo habilitados pelo
Spring geralmente no tm nenhuma dependncia com classes especficas deste.
Injeo de Dependncia O Spring promove baixo acoplamento atravs de uma
tcnica conhecida como injeo de dependncia (DI). Quando a DI for aplicada, os
objetos so passivamente colocados em suas dependncias, no lugar de criarem ou
procurarem por objetos dependentes. possvel pensar em DI como JNDI s avessas
no lugar de um objeto pesquisar por dependncias em um container, este que
d as dependncias ao objeto imediatamente, sem esperar ser requisitado.
Orientado a Aspecto O Spring vem com um rico suporte para programao orientada
a aspecto (AOP), que permite um desenvolvimento coeso, separando a lgica de
negcio dos aplicativos, dos servios de sistema (como auditoria e gerenciamento de
transao). Objetos de aplicativo fazem o que tm de fazer executar a lgica de
negcios e nada mais. No so responsveis por (ou at mesmo cientes de) outras
preocupaes do sistema, como realizao de log ou suporte transacional.
Container O Spring um container no sentido em que contm e gerencia o ciclo
de vida e a configurao de objetos do aplicativo. Em Spring, possvel declarar como
cada objeto de suas aplicaes deve ser criado, configurado e associado entre si.
Framework O Spring torna possvel configurar e compor aplicativos complexos a
partir de componentes mais simples. No Spring, os objetos de aplicativo so compostos
de modo declarativo, geralmente em um arquivo XML. O Spring tambm fornece muita
funcionalidade de infra-estrutura (gerenciamento de transao, integrao de framework
de persistncia, etc), deixando o desenvolvimento da lgica de aplicao para voc.
Recapitulando: Quando as partes da base do Spring so dissecadas, o que se obtm um
framework que ajuda no desenvolvimento de cdigo de aplicativo com baixo acoplamento. Mesmo
se isso fosse tudo o que pudesse fazer, os benefcios de baixo acoplamento (manutenibilidade e
testabilidade) fazem do Spring um framework que vale a pena para desenvolver aplicativos.
Mas ele mais do que isso. O Framework Spring vem com uma srie de mdulos construdos
a partir da base de injeo de dependncia e AOP, e cria uma plataforma cheia de recursos,
sobre a qual se constroem os aplicativos.
30
Spring em Ao
AOP
Remotabilidade
Web
JMX
JCA
JMS
MVC
Contexto
DAO
Ncleo
Figura 1.1 O Framework Spring composto de vrios mdulos bem definidos construdos em cima
do container base. Esta modularidade torna possvel usar mais ou menos do Framework Spring
conforme o necessrio num aplicativo particular.
O container base
Muito da base da figura 1.1, voc encontrar no container base do Spring. Este fornece a
funcionalidade fundamental do Framework Spring. Este mdulo contm o BeanFactory,
que o container fundamental do Spring e a base na qual a DI se fundamenta.
Discutiremos o mdulo base (o centro de qualquer aplicativo Spring) ao longo deste livro,
iniciando no captulo 2, quando examinaremos a associao de beans usando DI.
CAPTULO 1
Como colocar o Spring em ao
31
32
Spring em Ao
Remotabilidade
Nem todos os aplicativos trabalham sozinhos. s vezes, necessrio que um aplicativo alavanque
a funcionalidade de outro aplicativo para conseguir fazer seu trabalho. Quando outro aplicativo
acessado atravs da rede, alguma forma de remotabilidade utilizada para a comunicao.
O suporte para remoting do Spring permite que voc exponha a funcionalidade de seus objetos
Java como objetos remotos. Ou se for necessrio acessar os objetos remotamente, o mdulo
CAPTULO 1
Como colocar o Spring em ao
33
remoting tambm facilita o trabalho de associao de objetos remotos em seus aplicativos como se
fossem POJOs locais. Muitas opes de remoting esto disponveis, incluindo o Remote Method
Invocation (RMI), Hessian, Burlap, JAX-RPC e prprio invocador HTTP do Spring.
No captulo 8, exploraremos as diversas opes de remoting com suporte em Spring.
package com.springinaction.chapter01.hello;
public class GreetingServiceImpl implements GreetingService {
private String greeting;
public GreetingServiceImpl() {}
public GreetingServiceImpl(String greeting) {