Spring Boot中personneService类型Bean找不到的问题求助
解决Spring Boot中找不到personneService Bean的问题
问题描述
com.example.NewProfile.controller.clientController中的personneservice字段需要一个类型为'com.example.NewProfile.service.personneService'的Bean,但未找到。
注入点带有以下注解:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
操作建议:
请考虑在配置中定义类型为'com.example.NewProfile.service.personneService'的Bean。
进程以退出代码1结束。
核心问题分析
- 服务实现类
personneServiceImlp未添加Spring组件注解,导致Spring无法扫描并创建该类的实例Bean - 控制器类
clientController错误添加了@Service注解,控制器只需@RestController即可 - 服务接口
personneService不需要@Service注解,接口本身无法被实例化,该注解应加在实现类上
解决方案
1. 给服务实现类添加@Service注解
修改personneServiceImlp,添加@Service注解,让Spring将其识别为可管理的Bean:
package com.example.NewProfile.service; import com.example.NewProfile.model.personne; import com.example.NewProfile.repository.personneRepository; import org.springframework.stereotype.Service; import java.util.List; @Service public class personneServiceImlp implements personneService{ private final personneRepository personRepository; public personneServiceImlp(personneRepository personRepository) { this.personRepository = personRepository; } @Override public personne createPersonne(personne person1) { return personRepository.save(person1); } @Override public List<personne> getPersonne() { return personRepository.findAll(); } @Override public personne getPersonneById(long id) { return personRepository.findById(id).get(); } @Override public void deletePersonne(long id) { personRepository.deleteById(id); } @Override public personne updatePersonne(personne person1, long id) { personne person2 = personRepository.findById(id).get(); person2.setNom(person1.getNom()); person2.setPrenom(person1.getPrenom()); person2.setDate_naissance(person1.getDate_naissance()); return personRepository.save(person2); } }
2. 移除服务接口上的@Service注解
接口不需要@Service注解,删除personneService中的该注解:
package com.example.NewProfile.service; import com.example.NewProfile.model.personne; import java.util.List; public interface personneService { personne createPersonne(personne person1); List<personne> getPersonne(); personne getPersonneById(long id); void deletePersonne(long id); personne updatePersonne(personne person1,long id); }
3. 移除控制器类上多余的@Service注解
控制器只需保留@RestController和@RequestMapping,删除clientController中的@Service:
package com.example.NewProfile.controller; import com.example.NewProfile.model.personne; import com.example.NewProfile.service.personneService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/personne") public class clientController { @Autowired private personneService personneservice; @PostMapping public personne createpersonne(@RequestBody personne person){ personne person1 = personneservice.createPersonne(person); return person1; } @GetMapping public List<personne> getPersons(){ return personneservice.getPersonne(); } @PutMapping("/{id}") public personne updatePersonById(@RequestBody personne person , @PathVariable("id") long id){ return personneservice.updatePersonne(person,id); } @DeleteMapping("/{id}") public String deletePerson(@PathVariable("id") long id){ personneservice.deletePersonne(id); return "person is successfully deleted"; } @GetMapping("/{id}") public personne getPersonById(@PathVariable("id") long id){ return personneservice.getPersonneById(id); } }
额外注意事项
确保你的Spring Boot主启动类位于com.example.NewProfile包下(或包含所有组件的父包),这样Spring的组件扫描机制才能自动发现这些加了注解的类。
内容的提问来源于stack exchange,提问作者Knani Raef
相关产品推荐
相关产品推荐

