创建 Bean 时出错: 名称控制器注入自动连线的依赖项失败;



问题是@autowiring不起作用,我关注了所有搜索结果,但仍然收到此错误"创建 bean 时出错:名称控制器注入自动连线依赖项失败",任何帮助将不胜感激。

堆栈跟踪:

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

问题出在 Spring 容器将在启动期间运行时提供实现TravailRepository接口方法。

基本上,Spring 数据 JPA 几乎没有规则来实现(在容器启动期间)存储库界面中的方法,并且由于您的方法名称saveTravaildeleteTravailById而失败。

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

void saveTravail(Travail travail);
void deleteTravailById(int id);

相反,你可以直接从CrudRepository使用这些方法(即save(S entity)delete(ID id))(在这里查看API)