Universidade Federal do Ceará Engenharia de Software – Projeto Detalhado de Software 2014.2
Motivação  Problemas Essências  Problemas da própria Orientação a Objetos  Auto Acoplamento e como injetar dependências  Problemas Específicos  Problemas da plataforma Java  A Sun “empurrou” os EJBs para os desenvolvedores
Alto Acoplamento  Como lidar com o alto acoplamento de forma que o objeto cliente não dependa diretamente da implementação do objeto serviço?
Inversão de Dependências  Inverta as Dependências e faça com que classes dependam de interfaces (contratos de métodos).
Inversão de Dependências  O acoplamento realmente melhorou?  Não! Então como usar a Inversão de Dependências efetivamente?
IoC/DI Inversão de Controle e Injeção de Dependências  Delegue a responsabilidade de criação de objetos a outra parte do sistema  Injete as Dependências com um container  Encapsule a responsabilidade de criar objetos em um único local
Programação Orientada a Aspectos(AOP)  O AOP diminui ainda mais o acoplamento onde a orientação a objetos não consegue chegar  Existem comportamentos que aparecem por toda a aplicação que não estão necessariamente relacionados a lógica de negócio  Esses comportamentos podem gerar repetição e são chamados de Aspectos  Após a identificação e isolamento dos Aspectos o AOP precisa interceptar a execução de métodos em que existe a necessidade de incluir um desses comportamentos
Java Enterprise Edition (Java EE)  A Sun criou seu próprio padrão para implementação de lógica de negócios, os Enterprise Java Beans (EJBs), e “empurrou-os” para os desenvolvedores.  Em meados de 2004 a plataforma Java EE era muito distinta da atual. Os EJBs tinham problemas :  Não podiam ser executadas fora de um container de aplicação, o que dificultava os testes - desenvolvimento orientada a testes estava se tornando popular na época  Eram complexos e muitos desenvolvedores subutilizavam de seus recursos  O container EJB é intrusivo, ou seja, os objetos dependem da(s) biblioteca(s) do container EJB por interfaces ou anotações.
Surgimento do Spring  Começou a surgir com a publicação do livro Expert One-To-One J2EE Design and Development de Rod Johnson que criticava os EJBs  O Spring surgiu com o intuito de minimizar os problemas apresentados (essenciais e específicos) oferecendo um container alternativo ao container EJB  Spring é resultado de IoC (Inversão de Controle) + DI (Injeção de Dependências) + AOP (Programação Orientada a Aspectos)
Vantagens do Spring  O container Spring é não intrusivo  Facilidade para se escrever testes  Container independente de ambiente, não necessita de servidor de aplicação  Facilidade para reuso de código
Core Container – O núcleo do Spring  As classes básicas estão no módulo Core, onde estão implementadas as funcionalidades de reflexão, tratamento de strings etc  Expression Language é responsável pelo processamento das configurações do Spring, seja em xml, anotações ou por código  No Beans se encontra o BeanFactory, a primeira versão do container  Finalmente, no módulo Context está localizada a implementação mais avançada do container e recomendada pela Spring Source, a Application Context
Conceitos do Spring  Bean : É todo objeto gerenciado pelo container do Spring  Na declaração do Bean é indicada a classe a ser injetada. Existem dois tipos de injeção: por métodos setter ou por construtor  Exemplo de declaração de bean usando xml :
Conceitos do Spring  A instanciação de um objeto pode ser complexa e assim necessitar de fábricas ou builders. No Spring pode-se definir que um bean será instanciado por um deles.  Além disso há a possibilidade de mapear objetos complexos como listas, mapas, properties etc
Usando o Container  Como pegar instâncias dos Beans?  Primeiramente é necessário iniciar o container com as definições de Beans  Depois disso é só “pegar” os Beans
Componentes do Spring  Basicamente o Spring possui tudo que uma aplicação corporativa precisa, e todos os seus componentes são baseados no seu container
Um pouco de Spring MVC  Servlets adicionam muito código repetitivo a aplicação e é necessário lidar diretamente com objetos de requisição e resposta  Parâmetros de requisição são recebidos como strings e é necessário fazer várias conversões para montar um objeto de modelo  Não existe um único ponto de entrada para requisições  Modularizar o código se torna difícil  O Spring MVC facilita tudo isso e junto com outros módulos do framework tem grande poder para aplicações corporativas
Um pouco de Spring MVC  Depois da criação do container do Spring, a Spring Source percebeu a oportunidade de criar um framework MVC para aplicações WEB  A base do Spring MVC, como o próprio nome já diz, é o padrão de arquitetura MVC e uso do padrão Front Controller  O MVC nos permite isolar a camada de negócios (modelo) da de visualização através de uma cadama intermediária, o Controlador.  O Front Controller intercepta todas as requisições para direcionar ao Controlador adequado Controlador no Spring Framework
Exemplo de Spring MVC Controlador View mapeada para pasta WEB-INF/view/helloWorld.html
Referências Bibliográficas  Professor Camilo Camilo Almendra  camilo@es.ufc.br  Alunos :  Alexsandro Oliveira Alexandrino  sandrooliveira1501@gmail.com  Cayk Lima Barreto  cayk-lima@hotmail.com  Guia oficial Spring: http://docs.spring.io/spring/docs/4.1.2 .BUILD-SNAPSHOT/spring-framework-reference/ htmlsingle/#overview  FLOWER, Martin, Inversion of Control Containers and the Dependency Injection pattern. Disponível em : http://www.martinfowler.com/articles /injection.html  Rod Johnson. Expert One-To-One J2EE Development Without EJB. Wrox Press,2004.  Lobo, Henrique. Vire o Jogo com Spring Framework. Casa do Código.

Arquitetura do Framework Spring

  • 1.
    Universidade Federal doCeará Engenharia de Software – Projeto Detalhado de Software 2014.2
  • 2.
    Motivação  ProblemasEssências  Problemas da própria Orientação a Objetos  Auto Acoplamento e como injetar dependências  Problemas Específicos  Problemas da plataforma Java  A Sun “empurrou” os EJBs para os desenvolvedores
  • 3.
    Alto Acoplamento Como lidar com o alto acoplamento de forma que o objeto cliente não dependa diretamente da implementação do objeto serviço?
  • 4.
    Inversão de Dependências  Inverta as Dependências e faça com que classes dependam de interfaces (contratos de métodos).
  • 5.
    Inversão de Dependências  O acoplamento realmente melhorou?  Não! Então como usar a Inversão de Dependências efetivamente?
  • 6.
    IoC/DI Inversão deControle e Injeção de Dependências  Delegue a responsabilidade de criação de objetos a outra parte do sistema  Injete as Dependências com um container  Encapsule a responsabilidade de criar objetos em um único local
  • 7.
    Programação Orientada aAspectos(AOP)  O AOP diminui ainda mais o acoplamento onde a orientação a objetos não consegue chegar  Existem comportamentos que aparecem por toda a aplicação que não estão necessariamente relacionados a lógica de negócio  Esses comportamentos podem gerar repetição e são chamados de Aspectos  Após a identificação e isolamento dos Aspectos o AOP precisa interceptar a execução de métodos em que existe a necessidade de incluir um desses comportamentos
  • 8.
    Java Enterprise Edition(Java EE)  A Sun criou seu próprio padrão para implementação de lógica de negócios, os Enterprise Java Beans (EJBs), e “empurrou-os” para os desenvolvedores.  Em meados de 2004 a plataforma Java EE era muito distinta da atual. Os EJBs tinham problemas :  Não podiam ser executadas fora de um container de aplicação, o que dificultava os testes - desenvolvimento orientada a testes estava se tornando popular na época  Eram complexos e muitos desenvolvedores subutilizavam de seus recursos  O container EJB é intrusivo, ou seja, os objetos dependem da(s) biblioteca(s) do container EJB por interfaces ou anotações.
  • 9.
    Surgimento do Spring  Começou a surgir com a publicação do livro Expert One-To-One J2EE Design and Development de Rod Johnson que criticava os EJBs  O Spring surgiu com o intuito de minimizar os problemas apresentados (essenciais e específicos) oferecendo um container alternativo ao container EJB  Spring é resultado de IoC (Inversão de Controle) + DI (Injeção de Dependências) + AOP (Programação Orientada a Aspectos)
  • 10.
    Vantagens do Spring  O container Spring é não intrusivo  Facilidade para se escrever testes  Container independente de ambiente, não necessita de servidor de aplicação  Facilidade para reuso de código
  • 11.
    Core Container –O núcleo do Spring  As classes básicas estão no módulo Core, onde estão implementadas as funcionalidades de reflexão, tratamento de strings etc  Expression Language é responsável pelo processamento das configurações do Spring, seja em xml, anotações ou por código  No Beans se encontra o BeanFactory, a primeira versão do container  Finalmente, no módulo Context está localizada a implementação mais avançada do container e recomendada pela Spring Source, a Application Context
  • 12.
    Conceitos do Spring  Bean : É todo objeto gerenciado pelo container do Spring  Na declaração do Bean é indicada a classe a ser injetada. Existem dois tipos de injeção: por métodos setter ou por construtor  Exemplo de declaração de bean usando xml :
  • 13.
    Conceitos do Spring  A instanciação de um objeto pode ser complexa e assim necessitar de fábricas ou builders. No Spring pode-se definir que um bean será instanciado por um deles.  Além disso há a possibilidade de mapear objetos complexos como listas, mapas, properties etc
  • 14.
    Usando o Container  Como pegar instâncias dos Beans?  Primeiramente é necessário iniciar o container com as definições de Beans  Depois disso é só “pegar” os Beans
  • 15.
    Componentes do Spring  Basicamente o Spring possui tudo que uma aplicação corporativa precisa, e todos os seus componentes são baseados no seu container
  • 16.
    Um pouco deSpring MVC  Servlets adicionam muito código repetitivo a aplicação e é necessário lidar diretamente com objetos de requisição e resposta  Parâmetros de requisição são recebidos como strings e é necessário fazer várias conversões para montar um objeto de modelo  Não existe um único ponto de entrada para requisições  Modularizar o código se torna difícil  O Spring MVC facilita tudo isso e junto com outros módulos do framework tem grande poder para aplicações corporativas
  • 17.
    Um pouco deSpring MVC  Depois da criação do container do Spring, a Spring Source percebeu a oportunidade de criar um framework MVC para aplicações WEB  A base do Spring MVC, como o próprio nome já diz, é o padrão de arquitetura MVC e uso do padrão Front Controller  O MVC nos permite isolar a camada de negócios (modelo) da de visualização através de uma cadama intermediária, o Controlador.  O Front Controller intercepta todas as requisições para direcionar ao Controlador adequado Controlador no Spring Framework
  • 18.
    Exemplo de SpringMVC Controlador View mapeada para pasta WEB-INF/view/helloWorld.html
  • 19.
    Referências Bibliográficas Professor Camilo Camilo Almendra  camilo@es.ufc.br  Alunos :  Alexsandro Oliveira Alexandrino  sandrooliveira1501@gmail.com  Cayk Lima Barreto  cayk-lima@hotmail.com  Guia oficial Spring: http://docs.spring.io/spring/docs/4.1.2 .BUILD-SNAPSHOT/spring-framework-reference/ htmlsingle/#overview  FLOWER, Martin, Inversion of Control Containers and the Dependency Injection pattern. Disponível em : http://www.martinfowler.com/articles /injection.html  Rod Johnson. Expert One-To-One J2EE Development Without EJB. Wrox Press,2004.  Lobo, Henrique. Vire o Jogo com Spring Framework. Casa do Código.