Spring MVC - QConSP

5,445 views

Published on

LT apresentada no QConSP 2012.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,445
On SlideShare
0
From Embeds
0
Number of Embeds
2,002
Actions
Shares
0
Downloads
89
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Spring MVC - QConSP

    1. 1. Vantagens e Desvantagens do Spring MVC @bregaida
    2. 2. Muitos Frameworks MVC
    3. 3. • JSF• Struts• Spring • WebWork• Mentawai • Play Framework• VRaptor • Click Framework• Demoiselle • JBanana• JBoss Seam • Etc• Neo Framework• Brutos Framework
    4. 4. Qual escolher?
    5. 5. Escolha aquele que atende seunegócio e te deixa confortável.
    6. 6. Spring Framework• Criado por Rod Johnson• Framework não intrusivo• Baseado em padrões IoC e Injeção de Dependência• O Container se encarrega de instanciar as classes Java e definir suas dependências• Possui uma arquitetura baseada em POJOs e Interfaces
    7. 7. Vantagens• Simples e de fácil aprendizado• Liberdade para trabalhar na View• Integração simples com outros frameworks• Navegação feita por anotações• BindResult e ModelAndView faz todo trabalho nas telas para validação e estado da página• Suporte a várias Views Freemaker, JSP, Velocity• Integração com Hibernate Validator
    8. 8. Anotações mais utilizadas• @Repository - Repositório dos dados• @Service - Camada de Serviços• @Qualifier - Qual Bean deverá ser injetado• @Autowired - Injeção dos Beans• @Controller - Camada View• @RequestMapping - Mapeamento do caminho• @RequestParam - Recebimento dos Parametros• @ResponseBody -Suporte a REST• @Valid - Responsável pela validação do parametro ou formulário
    9. 9. @Repository@Repositorypublic class ProdutoDao implements ProdutoDaoI {//Aqui código da Classe}
    10. 10. @Service@Servicepublic class ProdutoService implements ProdutoServiceI{//Aqui o código da classe}
    11. 11. @Controller@Controllerpublic class ProdutoController {//Aqui o código da classe}
    12. 12. @Autowired@Servicepublic class ProdutoService implements ProdutoServiceI{ @Autowired private ProdutoDao produtoDao;}@Controller@RequestMapping("/produto/**")public class ProdutoController { @Autowired private ProdutoService produtoService;}
    13. 13. @Qualifierimport org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier; public class Customer { " @Autowired" @Qualifier("personA")" private Person person;" //...} Fonte: http://www.mkyong.com/spring/spring-autowiring-qualifier-example/
    14. 14. @RequestMapping@Controller@RequestMapping("/produto/**")public class ProdutoController { @RequestMapping("/produto/formulario") public ModelAndView formulario() { return new ModelAndView("formulario").addObject("produtoForm", newProdutoForm()); } @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm,BindingResult result) { if (result.hasErrors()) { return newModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos",produtoService.pegaTodos()); }}
    15. 15. @RequestParam@RequestMapping(value = "/produto/remove", method = RequestMethod.GET) public ModelAndView remove(@Valid @RequestParam(value = "produto.id") long id){ produto = new Produto(); produto.setId(id); produtoService.remove(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos());}
    16. 16. @ResponseBody • Basta incluir os jars Jackson no projeto e será retornado um JSON: • jackson-core-asl-1.4.3.jar • jackson-mapper-asl-1.4.3.jarpublic @ResponseBody HashMap<String,Object> view(@RequestParam("start") int start,@RequestParam("limit") int limit) { List<Produto> produtos = produtoService.pegaTodos(); HashMap<String, Object> modelMap = new HashMap<String,Object>(); modelMap.put("produtos", produtos); return modelMap; }
    17. 17. @ResponseBody Com Nice URL@RequestMapping(value = "/{idParceiro}/{idModalidade}", method = RequestMethod.GET)    @ResponseBody    public Modalidade obtemModalidade(@PathVariable("idParceiro") Long idParceiro,@PathVariable("idModalidade") Long idModalidade, HttpSession sessao){        return modalidadeService.obtemModalidadePorParceiro(idParceiro, idModalidade);    }
    18. 18. ModelAndView@RequestMapping("/produto/formulario") public ModelAndView formulario() { return new ModelAndView("formulario").addObject("produtoForm", new ProdutoForm()); } @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
    19. 19. @Valid No Atributo public ModelAndView remove(@Valid @RequestParam(value = "produto.id") long id) { //Código do método } No Formulário @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
    20. 20. BindResult @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
    21. 21. Hibernate Validatorimport org.hibernate.validator.constraints.NotEmpty;public class ProdutoForm { private Long id; @NotEmpty(message = "Valor não pode ser vazio") private String nome; @NotEmpty(message = "Valor não pode ser vazio") private String descricao;}
    22. 22. Desvantagens
    23. 23. Ainda tem XMLs
    24. 24. Application-Config.xml
    25. 25. spring-servlet.xml
    26. 26. web.xml
    27. 27. Desvantagens• Tratar erros como 400, 404, 500 não são simples de tratar• Poucos componentes de tela feitos• Ainda possui configurações em XML ou configurações em classes.
    28. 28. Quer saber mais?• http://www.caelum.com.br/curso/fj-27-spring-framework/• http://www.javawora.blogspot.com• http://www.edsongoncalves.com.br/category/spring-mvc-3-0/• http://chavesrodolfo.blogspot.com.br/2011/02/anotacoes-do-spring.html• http://valdemarjr.net/2011/02/18/exemplo-spring-mvc-integrado-com-struts- tiles.html• http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html• http://maestric.com/doc/java/spring• http://netbeans.org/kb/docs/web/quickstart-webapps-spring_pt_BR.html• http://www.mkyong.com/spring-mvc/spring-mvc-hello-world-example/• http://www.mkyong.com/spring/spring-autowiring-qualifier-example/
    29. 29. Obrigado! eduardo.bregaida@gmail.com http://javawora.blogspot.comhttp://www.slideshare.net/eduardo.bregaida @bregaida

    ×