问题是@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);}
答案 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)