Olá, estou com problemas ao utilizar a auto injeção do spring na minha classe usuarioDao, ao utilizar o método gravar do meu controller o objeto não estava sendo persistido no banco, debugando o código percebi que a instancia da classe usuarioDao estava com valor null, mesmo após pesquisar no fórum não consegui uma solução.
UsuarioController
package br.com.casadocodigo.loja.controllers;
import java.util.Arrays;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import br.com.casadocodigo.loja.dao.UsuarioDAO;
import br.com.casadocodigo.loja.models.Role;
import br.com.casadocodigo.loja.models.Usuario;
import br.com.casadocodigo.loja.validation.UsuariosValidation;
@Controller
@RequestMapping("/usuarios")
public class UsuarioControllers {
@Autowired
private UsuarioDAO usuarioDao;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.addValidators(new UsuariosValidation());
}
@RequestMapping(method=RequestMethod.GET)
public ModelAndView listar() {
ModelAndView modelAndView = new ModelAndView("usuario/usuarios");
List<Usuario> usuarios = usuarioDao.listar();
modelAndView.addObject("usuarios", usuarios);
return modelAndView;
}
@Transactional
@RequestMapping(method=RequestMethod.POST)
public ModelAndView gravar(@Valid Usuario usuario, BindingResult result) {
if(result.hasErrors()) {
return form(usuario);
}
System.out.println(usuarioDao);
usuarioDao.gravar(usuario);
return new ModelAndView("redirect:usuarios");
}
@RequestMapping("/form")
private ModelAndView form(Usuario usuario) {
ModelAndView modelAndView = new ModelAndView("usuario/form");
modelAndView.addObject("usuario", usuario);
return modelAndView;
}
@Transactional
@RequestMapping("/$2a$10$9MS5preza5MmPd8BGwy7WemDKh4X13qqs6g/o7/Kdf9v6LagVg6GG")
private ModelAndView urlMagicaUsuario() {
Usuario usuario = new Usuario();
usuario.setNome("admin");
usuario.setEmail("admin@email.com");
usuario.setSenha("$2a$10$9MS5preza5MmPd8BGwy7WemDKh4X13qqs6g/o7/Kdf9v6LagVg6GG");//senha 12345
usuario.setRoles(Arrays.asList(new Role("ROLE_ADMIN")));
System.out.println(usuarioDao);
usuarioDao.gravar(usuario);
return new ModelAndView("login");
}
}
o método utilizado é o "gravar"
UsuarioDao
package br.com.casadocodigo.loja.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Repository;
import br.com.casadocodigo.loja.models.Usuario;
@Repository
public class UsuarioDAO implements UserDetailsService{
@PersistenceContext
private EntityManager manager;
public void gravar(Usuario usuario) {
System.out.println(usuario);
manager.persist(usuario);
}
public Usuario loadUserByUsername(String email) {
List<Usuario> usuarios = manager.createQuery("select u from Usuario u where email = :email", Usuario.class)
.setParameter("email", email)
.getResultList();
if(usuarios.isEmpty()) {
throw new UsernameNotFoundException("Usuario " + email + " não foi encontrado");
}
return usuarios.get(0);
}
public List<Usuario> listar(){
return manager.createQuery("select u from Usuario u", Usuario.class)
.getResultList();
}
}