Я использую SpringBoot, и я пытаюсь создать сервисный уровень для своего веб-приложения, но я не могу заставить его работать.Spring MVC - Как создать надлежащий уровень сервиса?
Мои классы похожи на эту
ServiceFactory
@Service
public class ServiceFactory {
@Autowired
public static EncuestaService getEncuestaService()
{
return new EncuestaServiceImpl();
}
}
EncuestaService
public interface EncuestaService {
void crearEncuesta(Encuesta encuesta, Map<String,String> parametros);
}
EncuestaServiceImpl
@Service
public class EncuestaServiceImpl implements EncuestaService {
@Override
public void crearEncuesta(Encuesta encuesta, Map<String, String> parametros) {
CrearEncuesta nueva = new CrearEncuesta(encuesta,parametros);
nueva.execute();
}
}
CrearEncuesta
@Service
public class CrearEncuesta {
private Encuesta encuesta;
private Map<String,String> parametros;
@Autowired
private RespuestasRepository respuestasRepository;
@Autowired
private EncuestasRepository encuestasRepository;
public CrearEncuesta(Encuesta encuesta, Map<String,String> parametros) {
super();
this.encuesta = encuesta;
this.parametros = parametros;
}
public void execute()
{
encuestasRepository.save(encuesta);
}
}
Everytime я называю ServiceFactory.getEncuestasService(). CrearEncuesta() из любого контроллера он возвращает мне NullPointerException.
Из того, что я читал, я не должен создавать новый EncuestsaServiceImpl() в моем ServiceFactory, но я действительно не знаю, как правильно это сделать. Буду признателен, если кто-нибудь сможет мне помочь: P.
Edit:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
Контроллер
@Controller
public class EncuestaController {
@RequestMapping(value ="registrarEncuesta", method = RequestMethod.POST)
private String formularioEncuesta(@Valid @ModelAttribute("formEncuesta") EncuestaForm formEncuesta, BindingResult bindingResult,@RequestParam Map<String,String> allRequestParams)
{
if (bindingResult.hasErrors()) {
return "nuevaEncuesta";
}
try {
Encuesta nueva = formEncuesta.toEncuesta();
ServiceFactory.getEncuestaService().crearEncuesta(nueva,allRequestParams);
} catch (DataIntegrityViolationException e) {
return "nuevaEncuesta";
}
return "redirect:/encuestas";
}
}
показать конфигурационный файл. –
Зачем вам ServiceFactory? Spring создаст/добавит экземпляр EncuestaService для вас. Также покажите нам свой контроллер. –
@ Kresimir Я добавил контроллер. – QoP