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. 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. 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
14. @RequestMapping
@Controller
@RequestMapping("/produto/**")
public class ProdutoController {
@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());
}
}
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. @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.jar
public @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. @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. 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. @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. 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());
}
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.