几天来,我一直在尝试创建Spring CRUD应用程序。我糊涂了。我无法解决此错误。
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clientController': Unsatisfied dependency expressed through method 'setClientService' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clientService': Unsatisfied dependency expressed through field 'clientRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.kopylov.repository.ClientRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
还有这个
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clientService': Unsatisfied dependency expressed through field 'clientRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.kopylov.repository.ClientRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
客户端控制器
@Controller public class ClientController { private ClientService clientService; @Autowired @Qualifier("clientService") public void setClientService(ClientService clientService){ this.clientService=clientService; } @RequestMapping(value = "registration/add", method = RequestMethod.POST) public String addUser(@ModelAttribute Client client){ this.clientService.addClient(client); return "home"; } }
ClientServiceImpl
@Service("clientService") public class ClientServiceImpl implements ClientService{ private ClientRepository clientRepository; @Autowired @Qualifier("clientRepository") public void setClientRepository(ClientRepository clientRepository){ this.clientRepository=clientRepository; } @Transactional public void addClient(Client client){ clientRepository.saveAndFlush(client); } }
客户资料库
public interface ClientRepository extends JpaRepository<Client, Integer> { }
我浏览了许多类似的问题,但是没有人回答不能帮助我。
ClientRepository应该用@Repository标记注释。使用你当前的配置,Spring将不会扫描该类并对其有所了解。在启动和连接时,找不到ClientRepository类。
@Repository
编辑 如果添加@Repository标签没有帮助,那么我认为问题可能出在ClientServiceand ClientServiceImpl。
ClientService
尝试用注释ClientService(接口)@Service。由于你应该只为服务提供一个实现,因此不需要使用optional参数指定名称@Service("clientService")。Spring将根据接口名称自动生成它。
@Service
optional
@Service("clientService")
另外,如Bruno所述,由于你只有该服务的单个实现,因此@Qualifier不需要ClientController。
@Qualifier
ClientController
ClientService.java
@Service public interface ClientService { void addClient(Client client); }
ClientServiceImpl.java(选项1)
@Service public class ClientServiceImpl implements ClientService{ private ClientRepository clientRepository; @Autowired public void setClientRepository(ClientRepository clientRepository){ this.clientRepository=clientRepository; } @Transactional public void addClient(Client client){ clientRepository.saveAndFlush(client); } }
ClientServiceImpl.java(选项2 /首选)
@Service public class ClientServiceImpl implements ClientService{ @Autowired private ClientRepository clientRepository; @Transactional public void addClient(Client client){ clientRepository.saveAndFlush(client); } }
ClientController.java
@Controller public class ClientController { private ClientService clientService; @Autowired //@Qualifier("clientService") public void setClientService(ClientService clientService){ this.clientService=clientService; } @RequestMapping(value = "registration", method = RequestMethod.GET) public String reg(Model model){ model.addAttribute("client", new Client()); return "registration"; } @RequestMapping(value = "registration/add", method = RequestMethod.POST) public String addUser(@ModelAttribute Client client){ this.clientService.addClient(client); return "home"; } }