中构造函数的参数 0 需要一个无法找到的 类型的 bean
Posted
技术标签:
【中文标题】' ' 中构造函数的参数 0 需要一个无法找到的 ' ' 类型的 bean【英文标题】:Parameter 0 of constructor in ' ' required a bean of type ' ' that could not be found 【发布时间】:2020-08-26 00:19:32 【问题描述】:我正在创建一个spring boot application
,其中任何客户端都可以提交请求,这些请求可以是GET
、PUT
、POST
、DELETE
。
但在创建此应用程序时,我收到以下错误:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.idr.springboot.service.PersonService required a bean of type 'com.idr.springboot.dao.PersonDao' that could not be found.
The following candidates were found but could not be injected:
- User-defined bean
Action:
Consider revisiting the entries above or defining a bean of type 'com.idr.springboot.dao.PersonDao' in your configuration.
我的应用程序的结构是:
PersonDao.java
package com.idr.springboot.dao;
import com.idr.springboot.model.Person;
import java.util.UUID;
public interface PersonDao
int insertPerson(UUID id, Person person);
default int insertPerson(Person person)
UUID id = UUID.randomUUID();
return insertPerson(id, person);
PersonService.java
package com.idr.springboot.service;
import com.idr.springboot.dao.PersonDao;
import com.idr.springboot.model.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service
public class PersonService
private final PersonDao personDao;
@Autowired
public PersonService(@Qualifier("fake demo") PersonDao personDao)
this.personDao = personDao;
public int addPerson(Person person)
return personDao.insertPerson(person);
我知道已经有人问了很多带有以下错误的问题,但我仍然无法解决这个问题。
Parameter 0 of constructor in com.idr.springboot.service.PersonService required a bean of type 'com.idr.springboot.dao.PersonDao' that could not be found.
我尝试用@Service
、@Repository
、@Component
注释PersonDao.java
,但我仍然遇到同样的错误。
我什至尝试了这些 SO 答案的解决方案:
(1)Parameter 0 of constructor in required a bean of type 'java.lang.String' that could not be found
(2)Spring - Error Parameter 0 of constructor in Service required a bean of type Configuration that could not be found
(3)Parameter 0 of constructor in ..... Spring Boot
但我仍然无法解决我的问题。
【问题讨论】:
你对限定词@Qualifier("fake demo") PersonDao personDao
的意图是什么?
PersonDao
不是JpaRepository
也不是spring bean,您必须将其定义为两者
好的@Lino,我知道了,我的应用程序开始成功运行
【参考方案1】:
通过将限定符 @Qualifier("fake demo")
添加到 public PersonService(@Qualifier("fake demo") PersonDao personDao)
来搜索具有该限定符的 bean 以注入不存在的 PersonService
。您也可以在 PersonDao
上声明此限定符或将其删除。我会建议删除它。另外你应该用@Repository
注释PersonDao
并扩展接口org.springframework.data.repository.Repository
。
【讨论】:
以上是关于 中构造函数的参数 0 需要一个无法找到的 类型的 bean的主要内容,如果未能解决你的问题,请参考以下文章
Controller 中构造函数的参数 0 需要一个找不到的 Service 类类型的 bean
com.din.OSS 中构造函数的参数 0 需要找不到类型为“java.lang.String”的 bean
如何解决此问题:LoginController 中构造函数的参数 0 需要找不到类型为“OktaOAuth2Properties”的 bean
JMeter JunitSampler 无法找到带有字符串参数的构造函数
反序列化类时出现“Newtonsoft.Json.JsonSerializationException 无法找到用于类型的构造函数”错误