2017-04-02 104 views
0

問題是@autowiring不起作用,我跟着所有的搜索結果,但仍然得到這個錯誤「錯誤創建bean:NameController注入自動裝配依賴失敗;」,任何幫助將不勝感激。創建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

的問題是與它Spring容器啓動時在運行時提供實施你的TravailRepository接口方法。

基本上,春數據JPA已得到落實(容器啓動時)在庫接口方法幾條規則,它是因爲你的方法名saveTravaildeleteTravailById的失敗。

所以,從你的TravailRepository界面刪除以下方法:

void saveTravail(Travail travail); 

void deleteTravailById(int id); 

相反,你可以直接使用這些方法(即save(S entity)delete(ID id))從CrudRepository(看API here

+0

謝謝,有效 ! – sand

相關問題