Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Spring MVC - QConSP

5,870 views

Published on

LT apresentada no QConSP 2012.

Published in: Technology
  • Be the first to comment

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

×