创建bean时出错:NameController自动连接依赖项的注入失败;

时间:2017-04-02 11:41:07

标签: spring spring-mvc

问题是@autowiring不起作用,我跟踪了所有搜索结果但仍然收到此错误“创建bean时出错:NameController自动连接依赖项注入失败;”,任何帮助都会非常感激。

堆栈跟踪:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'travailController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.pcd.service.TravailService com.pcd.restcontroller.TravailController.travailServ; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'travailServ': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.pcd.repository.TravailRepository com.pcd.serviceImpl.TravailServiceImpl.travailRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'travailRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property saveTravail found for type Travail!

控制器:

@Controller
public class TravailController {

@Autowired  
TravailService travailServ; 
@Autowired
MatiereService matiereServ;     
@Autowired
GroupeService groupeServ;


@RequestMapping(value = "/add", method = RequestMethod.POST)
public ModelAndView saveEmployee(@ModelAttribute("travail")Travail travail, 
  BindingResult result) {

  travailServ.saveTravail(new Travail());
  return new ModelAndView("redirect:/travail");
 }


  @RequestMapping(value = { "/list" }, method = RequestMethod.GET)
    public String newGroupe(@ModelAttribute("travail") Travail travail,ModelMap model,BindingResult result ) {


        model.addAttribute("travail", travail);
        model.addAttribute("matieres", matiereServ.findAlmatieres());

        model.addAttribute("groupes", groupeServ.findAllGroupes());
        model.addAttribute("listTravail", travailServ.findAllTravail());

        return "travail";
    }


    @RequestMapping("/remove/{id}")
    public String removePerson(@PathVariable("id") int id){

        this.travailServ.deleteTravailById(id);
        return "redirect:/travail";
    }

    @RequestMapping("/edit/{id}")
    public String editPerson(@PathVariable("id") int id, Model model){
        model.addAttribute("travail", travailServ.findById(id));
        model.addAttribute("listTravail", travailServ.findAllTravail());
        return "travail";
    }

TravailServiceImpl:

@Service("travailServ")

public class TravailServiceImpl implements TravailService{

@Autowired
 private TravailRepository travailRepository;
@Override
public List<Travail> findAllTravail() {
    try{
        return (List<Travail>) travailRepository.findAll();
    }catch(Exception e){
        return null;
    }
}
@Override

public Travail findById(int id) {
    return travailRepository.findById(id);
}
@Override

public Travail findByTitre(String titre) {

      return travailRepository.findByTitre(titre);
}
@Override
@Transactional
public Travail findByDescription(String description) {
      return travailRepository.findByDescription(description);
}
@Override
public void deleteTravailById(int id) {
      travailRepository.delete(id);

}
@Override
public void saveTravail(Travail travail) {
    travailRepository.save(travail);

}

TravailService:

public interface TravailService {

 List<Travail> findAllTravail();

 Travail findById(int id);

 Travail findByTitre(String titre);

 Travail findByDescription(String description);
 void saveTravail(Travail travail);

 void deleteTravailById(int id);


}

TravailRepository:

public interface TravailRepository extends CrudRepository<Travail, Integer> {
 List<Travail> findAllTravail();

 Travail findById(int id);
 Travail findByTitre(String titre);
 Travail findByDescription(String description);
 void saveTravail(Travail travail);

 void deleteTravailById(int id);}

1 个答案:

答案 0 :(得分:0)

问题在于你的TravailRepository接口方法 Spring容器将在启动时提供运行时的实现

基本上, Spring数据JPA几乎没有规则要实现(在容器启动期间)Repository接口中的方法,并且由于您的方法名称saveTravail和{{1}而失败}}

因此,请从deleteTravailById界面中删除以下方法:

TravailRepository

相反,您可以直接使用 void saveTravail(Travail travail); void deleteTravailById(int id); 中的这些方法(即save(S entity)delete(ID id))(看看API here