当前位置: 首页 > 知识库问答 >
问题:

如何修复“field…需要一个类型…的bean无法找到”异常Spring Boot

景星华
2023-03-14

我正在使用关于@autowired和@primary annotation的spring boot教程
下面你可以找到我的主类

package com.example.springtest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import service.Animal;

@SpringBootApplication
public class SpringtestApplication {
@Autowired
private Animal animal;

public static void main(String[] args) {
    SpringApplication.run(SpringtestApplication.class, args);

}

}

动物界面(我应该学会的界面)

package service;

public interface Animal {


      String characteristics();
}
package service;


import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;

@Primary
@Service
public class Dog implements Animal {

    @Override
    public String characteristics() {
        return "Bark";
    }
}
package service;


import org.springframework.stereotype.Service;

@Service
public class Cat implements Animal {

    @Override
    public String characteristics() {
        return "Meow";
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springtest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springtest</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

当我运行应用程序时,动物注射出现问题,我得到以下错误:

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

Description:

Field animal in com.example.springtest.SpringtestApplication required a bean of type 'service.Animal' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'service.Animal' in your configuration.

Spring不能进行自动取舍的原因是什么?

共有1个答案

严兴旺
2023-03-14

您需要向主类添加@componentscan注释,告诉它扫描服务包,否则它不会初始化这些bean

 类似资料:
  • 使用mvn spring boot启动时:run或甚至使用gradle返回该问题。 这里是主要的类,在我看来所有的需求都可以,我使用的是org.springframework.boot版本1.5.7 以及: 使用Maven或Gradle会返回相同的问题。所有注释和包名称似乎都符合要求。

  • 我只是试图通过本教程springboot,但当我运行它显示一个错误。我不明白这个错误。 ”描述: com.mii.tugas.中setEmf方法的参数0。Mahasiswao需要一个无法找到的'javax.persistence.EntityManagerFactory'类型的bean。 措施: 考虑定义“javax”类型的bean。坚持不懈配置中的EntityManagerFactory。" 这

  • 我一直在学习如何使用spring数据,并创建了一个非常简单的项目来测试它。文件夹结构和applicationcontext。xml显示在这里:applicationcontext。xml和文件夹结构我得到的错误显示在这里:控制台错误输出。我在类路径上有applicationContext,并声明了该类的bean,你知道我的问题是什么吗?非常感谢。 编辑:我已经更新了我的帖子,以显示主类和道类,以及

  • 编辑-更新:我根据本教程创建了一个全新的项目,我注意到,在配置pom后,问题是如果我添加 应用程序类的注释。 我是Spring Boot的新手,我已经创建了一个具有持久性的简单工作应用程序,现在我试图添加Spring security jwt,但它不起作用。 以下是我的项目结构: 在为安全性添加依赖项之前,它在持久性方面都工作得很好,现在是这样。我错过了什么?

  • 我搜索了很多stackoverflow,但没有找到解决问题的方法。当将SpringBoot应用程序作为WAR文件部署到Tomcat 8时,我发现以下错误,在本地它确实可以正常工作 有一个接口 和两个实现类 和二等舱 还有Rest服务 所以我不明白Tomcat怎么找不到像boolean这样的原始数据类型,也不明白为什么我在本地运行它时它能工作。 任何帮助都将不胜感激 问候马蒂亚斯