o framework spring

168
A Plataforma Spring Formador: Bruno Gama Catão E-mail: [email protected]

Upload: bruno-catao

Post on 26-May-2015

4.318 views

Category:

Technology


3 download

DESCRIPTION

Introdução ao framework Spring ... material feito no ano de 2009

TRANSCRIPT

2. Agenda Introduo; Container de inverso de controle; Anotaes; Persistncia de dados; Programao orientada a aspectos; Spring MVC; Testes unitrios; Tpicos avanados; Concluso. 3. Introduo O que Spring ? Definio oficial: Plataforma para seucdigo Java que prov um suporteinfraestrutural para o desenvolvimento deaplicaes; Spring encarrega-se do trabalho demontar a aplicao para que voc possapreocupar-se em resolver os problemasde negcio; Por fim, Spring permite que aplicaessejam desenvolvida utilizando-se apenasPOJOs. 4. Plataformas alvo Devido a sua arquitetura baseada emPOJOs, Spring pode ser utilizada paradesenvover aplicaes: JSE: Pois trata-se de uma plataforma leve e que no requere um servidor de aplicaes; JEE: Pois consegue prover servios importantes para o desenvolvimento de aplicaes corporativas, tais como: transaes, sergurana e persistncia. 5. Spring vs EJB 3 (1/2) Vantagens do EJB 3: Plataforma padro de mercado, definidapelo JCP (Java Community Process) parao desenvolvimento de aplicaes JEE; Total integrao com os servidores deaplicao; Grande produtividade aps a introduodas anotaes com especificao JEE5.0. 6. Spring vs EJB 3 (2/2) Vantagens do Spring: Plataforma leve, no necessita de umservidor de aplicaes; Sistemas podem executar em qualquerambiente JSE e JEE; Apesar de no ser padro, Spring umframework bastante popular; Sistemas feitos em Spring so fceis detestar; Plataforma desenvolvida de forma aincentivar o reuso e boas prticas deprojeto de quem a utiliza. 7. Quem usa Spring ? PETROBRAS; Bradesco; Empresas de TI: Politec - Brasil; Stefanini - Brasil; Indra Company Espanha; LinkedIn !!! Detalhes: 2 data centers, ~600 mquinas,~100 componentes e ~30 milhes deusurios (fonte: Raible Designs) 8. Inverso de controle (1/3) Paradigma tradicional: As dependncias entre os objetos soresolvidas diretamente, ou seja, sodefinidas diretamente durante aimplementao. Dependncia lgicaInterfaceAlgoritmoJuro AssociaosCalculaDivid a Generalizao Dependncia direta JurosComposto JurosSimples s 9. Inverso de controle (2/3) Inverso de controle ou injeo de dependncias (por Martin Fowler): As dependncias so injetadas indiretamente atravs de uma entidade externa.Dependncia lgica InterfaceAlgoritmoJuro Associaos CalculaDividaGeneralizao InjetaDependncia 32dependncia injetada JurosComposto JurosSimples sSpring 1 Instancia dependncia 10. Inverso de controle (3/3) Vantagens: Ausncia de cdigo de montagem; Incentivo baixo acoplamento e reusoatravs de utilizao de interfaces e acriao de componentes; Com a montagem separada daimplementao fica fcil trocarcomponentes e testar diferentes soluessem a necessidade de modificar orestante do sistema. 11. Primeiro exemplo Vamos implementar um simplescalculador de dvidas utilizandoSpring; Esta aplicao ser composta por 3classes, 1 interface e 1 arquivo deconfigurao. Arquitetura do exemplo:CalculaDivid Interface AlgoritmoJuroaAssociaos Generalizao JurosCompostoJurosSimples s 12. Configurao do ambiente Bibliotecas necessrias: Spring core (verso 3.0.0.M3); Apache commons logging (verso 1.1.1); Springsource Antlr (verso 3.0.1); Fontes: Spring core: http://s3.amazonaws.com/dist.springframework.org/miles tone/SPR/spring-framework-3.0.0.M3-with-docs.zip Apache commons logging: http://commons.apache.org/downloads/download_loggin g.cgi Springsource Antlr: http://www.springsource.com/repository/app/bundle/versi on/detail?name=com.springsource.org.antlr&version=3.0 .1 13. Interface AlgoritmoJuros 14. Classe CalculaDivida 15. Classe JurosSimples 16. Classe JurosCompostos 17. Arquivo de configuraoSpring 1 2 3 InterfaceCalculaDivid 2 3 AlgoritmoJuro as JurosComposto 1 s 18. Executando o exemplo1231 Montagem da aplicao / Obteno de um contexto aplicacional Spring2 Obteno de um bean definido no contexto aplicational (servio);3 Invocao do mtodo de negcios. Resultado da execuo:****************************Montande inicial:1000,00Taxa de juros: 0,50Quantidade de meses: 3Montande final:3375,00**************************** 19. Conceitos bsicos Beans; Como criar beans; Quando criar beans; Definio de escopo; Ciclo de vida; Propriedades; Templates e especializao; Utilizando mais de 1 arquivo deconfigurao; Propriedades externas; Contextos de aplicao. 20. Beans Bean: Qualquer objeto definido dentro doSpring; Um Bean Spring um POJO, noprecisa ser um Java Bean; nico requisito: As propriedades devem seguir aconveno get/set; Definio bsica de um bean: Aninhada: com.mysql.jdbc.Driver 50. Propriedades (3/25) Valores nulos (nulls): Elemento null: Ateno, um valor vazio convertido para (String vazio): 51. Propriedades (4/25) Referncias a outros beans: Nome da referncia (definida no contexto): Elemento idref: O elemento idref foi criado como uma forma livre de erros (pois a referncia validada quando o contexto carregado). Forma incorreta de obter o nome de uma referncia: Nome de uma referncia local: Definida no mesmo arquivo de configurao: 52. Propriedades (5/25) Referncias a outros beans: Referncia a um bean (definido no contexto): Atributo ref (representao in-line): Elemento ref (representao aninhada): Referncia a um bean local: Definido no mesmo arquivo de configurao: 53. Propriedades (6/25) Tipos especiais: Apesar de Spring poder criar objetos dequalquer classe, existem alguns tipos deobjetos em Java (ex: colees e mapas)que so bastante utilizados e que seriainteressante se houvesse uma forma deinstanci-los e inicializ-los; Por esta razo, Spring prov uma sriede fbricas e elementos especiais comeste propsito. 54. Propriedades (7/25) Tipos especiais / colees: A definio de colees utiliza as classesdo pacoteorg.springframework.beans.factory.config; As fbricas responsveis por criarcolees, presentes neste pacote,seguem a mesma conveno; Por exemplo, para criar uma lista nsutilizaremos a classe ListFactoryBean,existem tambm as classesMapFactoryBean e SetFactoryBean. 55. Propriedades (8/25) Tipos especiais / colees exemplo: 56. Propriedades (9/25) Tipos especiais / colees exemplo: Classe: 57. Propriedades (10/25) Tipos especiais / colees exemplo: Resultado da execuo: Janeiro Fevereiro Maro Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro 58. Propriedades (11/25) Tipos especiais / colees: A partir da especificao 2.0 do Spring,criou-se alguns elementos especiais quefacilitam a tarefa de instanciar ascolees. Estes elementos so: list definio de uma lista; set definio de um conjunto; map definio de um mapa; props definio de um objeto de propriedades. 59. Propriedades (12/25) Tipos especiais / colees: Exemplo de list: 60. Propriedades (13/25) Tipos especiais / colees: Sintaxe do list: Elemento principal: list; Elementos aninhados (valores possveis padro): value; ref; idref; null; list; map; props; bean. 61. Propriedades (14/25) Tipos especiais / colees: Exemplo de map: 62. Propriedades (15/25) Tipos especiais / colees: Sintaxe do map: Elemento principal: map; Elemento aninhado: entry representa uma dupla (chave, valor) de um mapa: Propriedades: key (obrigatrio) chave do item armazenado no map; value (opcional) valor armazenado no map; value-ref (opcional) referncia a um bean armazenado no map; Elementos aninhados: Valores possveis padro (ref. sintaxe do list). 63. Propriedades (16/25) Tipos especiais / colees: Exemplo de set: 64. Propriedades (17/25) Tipos especiais / colees: Sintaxe do set: Elemento principal: set Elementos aninhados (valores possveis padro): value; ref; idref; null; list; map; props; bean. 65. Propriedades (18/25) Tipos especiais / colees: Exemplo de props: Observao: Podem set atribudos valores do tipo map para atributos do tipo props (properties). Spring faz a converso automaticamente. 66. Propriedades (19/25) Tipos especiais / colees: Sintaxe do props: Elemento principal: props; Elemento aninhado: props representa uma dupla (chave, valor) de um objeto de propriedades (property): Propriedades: key (obrigatrio) chave do item armazenado no map; Elementos aninhados: Valores literais; null; ref; idref. 67. Propriedades (20/25) Tipos especiais / colees: Vimos como atribuir uma coleo (list,set, map ou prop) diretamente a um valor: Porm, existem casos em que necessrio reusar uma mesma coleo,para isto foi desenvolvido o namespaceutil com os seguintes elementos: util:list; util:set; util:map; util:set. 68. Propriedades (21/25) Tipos especiais / colees: Exemplo namespace util: Declarao do namespace:11 Declarao do namespace util. Utilizao: 69. Propriedades (22/25) Tipos especiais / contantes: A utilizao de constantes naimplementao de sistemas deinformao importante por melhorar alegibilidade do cdigo, eliminando osnmeros mgicos; Em Spring, no namespace util, existe umelemento chamado util:constantresponsvel por importar valoresconstantes definidos nas classes. 70. Propriedades (23/25) Tipos especiais / constantes: Exemplo:11 Obteno do valor da constante. 71. Propriedades (24/25) Beans aninhados: Vimos anteriormente como atribuirreferncias de beans valores depropriedades utilizando o elemento ref; Porm, caso no seja necessrioreutilizar o bean referenciado, poderemosrealizar esta atribuio de uma formamais compacta. 72. Propriedades (25/25) Beans aninhados: Exemplo:11 Bean aninhado. Referncia implcita. 73. Templates e especializao(1/7) No desenvolvimento de um grandesistema de informao comum adeclarao de vrios beans compropriedades semelhantes; Com a inteno de aumentar o reuso decdigo, possvel transformar adeclarao de um bean em um templatee especializ-lo posteriormente,alterando apenas o que for necessrio; Para isto, deve-se utilizar o atributoparent na definio do bean. 74. Templates e especializao(2/7) Exemplo: Arquitetura:CadastroPessoa Composio AssociaoProfissao 75. Templates e especializao(3/7) Exemplo - classe Profissao: 76. Templates e especializao(4/7) Exemplo - classe Pessoa: 77. Templates e especializao(5/7) Exemplo - classe Cadastro: 78. Templates e especializao(6/7) Exemplo arquivo de configurao:121 Definio do template.2 Especializao do template. 79. Templates e especializao(7/7) Beans abstratos: possvel que um template norepresente um bean que deva serinstanciado, mas sim, apenasespecializado por outros beans; Neste caso, diz-se que este bean abstrato; Para explicitar que um bean abstrato epara proibir que ele seja instanciado,deve-se utilizar o atributo abstract com ovalor true. 80. Mais de um arquivo deconfigurao Em sistemas muito grandes, comvrios mdulos, no prtico mantertoda a configurao do sistema emapenas um arquivo; Uma boa prtica criar arquivos deconfigurao separados por mdulosou funcionalidades em comum; Para isto, a plataforma Spring, definealguns mecanismos que viabilizamesta modularizao. 81. Mais de um arquivo deconfigurao Conceitos bsicos: Recursos; Importao de arquivos de configurao; Aliases. 82. Mais de um arquivo deconfigurao Recursos: Forma de refernciar arquivos atravs deuma abstrao semelhante URLs; Tipos de recursos: classpath localiza o recurso utilizando o class loader corrente; file localiza o recurso utilizando o sistema de arquivos; http localiza o recurso utilizando uma conexo http; dependente do contexto, no caso do XmlApplicationContext, busca os recursos no mesmo diretrio do arquivo de configurao; Exemplo: classpath:/br/org/exemplo/applicationContext.xml 83. Mais de um arquivo deconfigurao Importao de arquivos deconfigurao: Elemento import; Exemplo: 84. Mais de um arquivo deconfigurao Aliases: Para reduzir o acoplamento entre doisarquivos de configurao dependentes entresi, possvel atribuir aliases (apelidos) paraos beans referenciados que foram definidosem outros arquivos; Exemplo: No exemplo anterior, o bean declarado como id emailService passar a ser chamadolocalmente pelo alias de servicoEmail.Assim, se o nome mudar no arquivo original,s ser necessrio alterar a definio doalias. 85. Propriedades externas As vezes interessante separaralguns valores de configurao emarquivos de propriedade externos. Porexemplo, configurao do acesso aobanco de dados ou a configurao domotor de log; Para isto, no namespace context,existe o elemento property-placeholder; Declarao do arquivo depropriedades: necessrio adicionar ao projeto bibliotecaaspect4j (neste caso aspect4j-1.6.5.jar); Declarando um aspecto: Um aspecto deve ser definido como uma classe,anotada com @Aspect; Os aspectos podem ser explicitamentedeclarados no arquivo de configurao, comobeans; Ou podem ser descobertos automaticamentepelo motor de anotaes do Spring: 153. Criando um aspecto123 1 Juno. 2 Sugesto antes (ref. juno intercepta); 3 Sugesto depois/retorno (ref. Juno intercept 154. Expresses para definirjunes Uma juno definida por umaexpresso; Toda expresso deve ser iniciada por umdesignador: execution execuo de um mtodo geral; within limita a execuo a alguns tipos(normalmente a um pacote); this limita a execuo a um tipo especficoem relao ao proxy; target limita a execuo a um tipoespecfico em relao ao tipo alvo; args limita a execuo mtodos comdeterminados argumentos. 155. Exemplos execution(public * *(..)) Execuo de todos os mtodos pblicos; execution(* set*(..)) Execuo de todos os mtodos iniciados emset; execution(*pacote.Classe.*(..)) Execuo de todos os mtodos da classeClasse do pacote pacote; within(pacote.*) Execuo de todos os mtodos de todas asclasses do pacote pacote. 156. Exemplos within(pacote..*) Execuo de todos os mtodos de todas asclasses do pacote pacote e sub-pacotes; this(pacote.Classe) Execuo de todos os mtodos da classeClasse no pacote Pacote; target(pacote.Classe) Execuo de todos os mtodos que invoquem osmtodos da classe Classe no pacote Pacote; args(java.lang.String) Execuo de todos os mtodos que tenhamapenas um parmetro, sendo este do tipojava.lang.String. 157. Formato da expressoexecution execution: modifiers-pattern? private, protected,public; ret-type-pattern classe que chama omtodo; declaring-type-pattern? classe que declarao mtodo; name-pattern(param-pattern) nome domtodo e parmetros; throws-pattern? excees lanadas pelomtodo. Os atributos que no forem opcionais,podem ser generalizados com o smbolo 158. Adicionando o aspecto aoexemplo Arquivo de configurao: Resultado da execuo sobre oexemplo anterior:13/05/2009 01:54:12 aspectos.LoggerExemplo logAntesINFO: Vai executar [listar]13/05/2009 01:54:12 aspectos.LoggerExemplo logDepoisINFO: Executou [listar] 159. Exemplo Sugesto em torno around: Implementao de profiling: 160. Exemplo Transaes declarativas; Para utilizarmos o suporte a transaesdeclarativas que Spring prov, veremoscomo utilizar aspectos diretamente noarquivo de configurao: 161. Exemplo Para definir transaesdeclarativamente necessrioimportar o namespace tx: xmlns:tx="http://www.springframework.org/schema/tx" Para as seguintes localizaes: http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spri ng-tx-2.5.xsd 162. Exemplo Definio do gestor de transaes: DataSourceTransactionManager; Atributo obrigatrio: dataSource; Associao do gestor de transaes: 163. Spring MVC Spring prov uma simplesimplementao de um framework paraproduo de pginas HTML e produode aplicaes Web, chamado SpringMVC; O Spring MVC baseado no frameworkStruts, verso 1, porm possui algumasvantagens, tais como: Qualquer classe (POJO) pode ser umformulrio (form); Qualquer classe (POJO) pode ser uma ao(controller); Suporte a temas. 164. Spring MVC - Funcionamento 12Usurio(Navegador ControladorControladoPrincipal rModel ) o 63Model o 54Template da Viso (JSP/XHTML ) 165. Configurando o ambiente O controlador principal (DispatcherServlet) deve ser configurado no arquivoweb.xml da sua aplicao web: Neste caso, qualquer url terminada em.form ser direcionada para o dispatcherservlet do Spring MVC. 166. Estudo de caso Agora ser implementada passo-a-passo, em sala de aula, uma pequenaaplicao web utilizando Spring MVC; Neste exerccio sero demonstradosos conceitos bsicos de Spring MVC,como criar uma aplicao simplesintegrada com um banco de dadosrelacional; Tempo estimado do exerccio: 3 horas. 167. Testes unitrios A plataforma Spring incentiva autilizao de POJOs para aconstruo de aplicaes atravs dautilizao de composio; Alm disto, possvel obter umcontexto de aplicao simplesmentereferenciando o arquivo deconfigurao do Spring; Desta forma bastante trivial aconstruo de testes de unidade. 168. Tpicos avanados Acesso a beans remotos (JNDI); Transaes; Agendamento de tarefas; Envio de e-mails; WebServices; JMS.