나는 스프링 부트를 사용하고 있으며 웹 응용 프로그램의 서비스 계층을 만들려고 노력하고 있지만 제대로 작동하지 않습니다.스프링 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);
}
}
매번 나는 그것이 나에게 NullPointerException이 반환하는 모든 컨트롤러에서 ServiceFactory.getEncuestasService(). crearEncuesta()를 호출합니다.
필자가 읽었던 것으로부터 나는 내 ServiceFactory에 새로운 EncuestsaServiceImpl()을 작성해서는 안되지만 실제로 그렇게하는 올바른 방법을 모른다. 누군가 나를 도울 수 있다면 고맙겠습니다 : P.
편집 :
@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