Spring MVC-如何创建适当的服务层?

质量

我正在使用SpringBoot,并且试图为我的Web应用程序创建服务层,但是我无法使其工作。

我的课看起来像这样

服务工厂

@Service
public class ServiceFactory {

  @Autowired
  public static EncuestaService getEncuestaService()
  {
    return new EncuestaServiceImpl();
  }
}

SurveyService

public interface EncuestaService {

void crearEncuesta(Encuesta encuesta, Map<String,String> parametros);

}

SurveyServiceImpl

@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);
}
}

每当我从任何控制器调用ServiceFactory.getEncuestasService()。crearEncuesta()时,它都会返回NullPointerException。

从我一直在阅读的内容中,我不应该在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";
 }
}
克雷西米尔·内塞克(KrešimirNesek)

您将不得不阅读有关依赖注入的更多内容。Spring Framework的中心原则是依赖注入,应使用它避免静态引用bean(服务实现,存储库实现等)。Spring容器还充当Bean工厂的角色,它将实例化实现并将其实现(自动装配)注入到需要它们的bean中。

因为Spring将为您实例化服务接口实现,所以您不需要ServiceFactory。在您的控制器中,您需要添加一个引用(一个字段)EncuestaService并对其进行注释Autowired,Spring会在实现中加入该引用然后,您可以在控制器中使用它。

@Controller
public class EncuestaController {

@Autowired
EncuestaService encuestaService;

@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();
        encuestaService.crearEncuesta(nueva,allRequestParams);
        } catch (DataIntegrityViolationException e) {
                return "nuevaEncuesta";
         }
    return "redirect:/encuestas";
 }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章