“”中构造函数的参数 0 需要一个“”类型的 bean,但无法找到

Posted

技术标签:

【中文标题】“”中构造函数的参数 0 需要一个“”类型的 bean,但无法找到【英文标题】:Parameter 0 of constructor in "" required a bean of type "" that could not be found 【发布时间】:2021-12-10 02:52:57 【问题描述】:

@RestController 及其设置运行良好。当我尝试将服务添加到控制器并自动连接它们时遇到了障碍。

据我所知,一切看起来都连接良好:构建良好,IDE 无法检测到任何问题。但我似乎缺少一些东西,因为它不会运行。

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in org.church.id.controller.ChapterController required a bean of type 'org.church.id.service.ChapterService' that could not be found.


Action:

Consider defining a bean of type 'org.church.id.service.ChapterService' in your configuration.

ChapterController.java

@RestController
@Log4j
public class ChapterController 

    @Getter
    private Map<Integer, Chapter> chapters;

    private ChapterService chapterService;

    @Autowired
    public ChapterController(ChapterService chapterService) 

        this.chapterService = chapterService;
    

    public void loadChapters() throws SQLException 

        log.debug("Loading chapters...");

        if (chapters != null) 
            chapters.clear();
        
        chapters = chapterService.findAll().stream().collect(Collectors.toMap(Chapter::getId, Function.identity()));
    

    @GetMapping("/chapter/list")
    public String list() throws SQLException 

        if (chapters == null) 
            loadChapters();
        
        return chapters.values().stream().map(Chapter::getName).collect(Collectors.joining(", "));
    


在我的 applicationContext.xml 中(我的错。我最初输入 pom.xml)

    ...
    <bean id="chapterController" class="org.church.id.controller.ChapterController">
        <constructor-arg name="chapterService" ref="chapterService"/>
    </bean>

    <bean id="chapterService" class="org.church.id.service.impl.ChapterServiceImpl">
        <constructor-arg name="config" ref="dbConfig"/>
        <constructor-arg name="addressUtil" ref="addressUtil"/>
    </bean>
    ...

真正的 pom.xml

        ...
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>$spring.boot.version</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>$spring.boot.version</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>$spring.boot.version</version>
            <scope>test</scope>
        </dependency>
        ...

ChapterServiceImpl.java

@Log4j
@AllArgsConstructor
@Setter
@Service
public class ChapterServiceImpl implements ChapterService 

    private DBConfig config;

    private AddressUtil addressUtil;
    ...

ChapterService.java(接口)

public interface ChapterService extends Service<Chapter> 

    Collection<Chapter> findByCountry(Country country) throws SQLException;

我环顾四周,但以下内容/不/对我有用

[x] 将(exclude = DataSourceAutoConfiguration.class) 添加到@SpringBootApplication [x] 将@Qualifier("chapterService") 添加到构造函数的参数:ChapterService chapterService

还要注意: 我已将其修改为只有一个默认构造函数,但是当我尝试通过 setter 注入时会发生相同类型的错误。我不知道怎么了。 :(

编辑: MainClassController.java

@SpringBootApplication
public class MainClassController 

    private ClassInfo model;

    private HashMap<Integer, String> classMap;

    public MainClassController() 
        loadData();
    

    public void loadData() 

    

    public static void main(String[] args) 

        SpringApplication.run(MainClassController.class, args);
    

【问题讨论】:

@user7294900 感谢您的回复。我试过你的建议,但它仍然会给出同样的错误:( 你的 spring 配置 XML 不属于你的 pom.xml 如果使用注解,则不需要使用 XML 配置。您可以将您的主要课程添加到问题中吗?谢谢。 1.如果您将 Spring bean 配置放在 pom.xml 中,那么您还有很长的路要走。 2. 快到 2022 年了,没有人再使用 Spring XML config 了。我猜是结合不同的互联网搜索的结果? Spring Boot 上的“入门”教程有数百个,只要按照最近的一个,根据需要更改代码即可。 【参考方案1】:

一点背景知识:我几年前就开始了我的项目,但后来被跟踪了,现在又重新开始了。

对我有用的是从一个基本的 spring-boot 项目开始,然后添加我的类并在我进行时进行修复。

正如@JoãoDias 在 cmets 中链接的那样:https://www.baeldung.com/spring-boot-start 是我获得基本弹簧靴的地方。 (查看文章中的 Spring Initializr)。

@AbhijitSarkar 还建议说“没有人再使用 Spring XML 配置”这实际上反映了我何时开始这个项目。也非常敏锐,他能够得到暗示我的问题是由于互联网搜索组合造成的。

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于“”中构造函数的参数 0 需要一个“”类型的 bean,但无法找到的主要内容,如果未能解决你的问题,请参考以下文章

Controller 中构造函数的参数 0 需要一个找不到的 Service 类类型的 bean

com.din.OSS 中构造函数的参数 0 需要找不到类型为“java.lang.String”的 bean

如何解决此问题:LoginController 中构造函数的参数 0 需要找不到类型为“OktaOAuth2Properties”的 bean

在构造函数中默认类的结构字段

对于实现接口的类型,你怎么能要求一个没有参数的构造函数呢?

为啥 C++ 映射类型参数在使用 [] 时需要一个空的构造函数?