【问题标题】:"Could not autowire. No beans of type... found" with Simple project“无法自动装配。没有找到类型的 bean”与简单项目
【发布时间】:2017-02-17 18:59:39
【问题描述】:

我下载了简单的JPA Spring Boot tutorial,它工作得很好。但是,当我尝试在我自己的测试项目中复制这个简单的行为时,我的 Application.demo() 方法中的 bean 注入出现“无法自动装配”错误,该方法返回一个 CommandLineRunner。这个项目太简单了,我什至不知道要提交什么,但这是 POM:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>test</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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


</project>

还有应用程序。

package com.example;

@SpringBootApplication
public class TestApplication {

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

    @Bean
    //errors with: "Could not autowire. No beans of 'SimpRepository' type found"
    public CommandLineRunner demo(SimpRepository repository) {
        return (args) -> {

        };
    }
}

以及存储库服务:

package com.example;
public interface SimpRepository extends CrudRepository<Simp, Long> {

}

对于以下实体:

package com.example;
@Entity
public class Simp {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String value;

    public Simp(String value) {
        this.value = value;
    }
}

【问题讨论】:

  • 您需要发布错误,而不仅仅是解释它。您还需要指定所有类所在的包。
  • 你可以尝试在你的 SimpRepository 界面上使用@Repository。
  • @cody123 添加注释确实可以解决问题。但我很好奇为什么它在没有它的情况下在原始演示项目中工作
  • 答案已由 metacubed 提供。如果对您有帮助,您可以点赞评论。
  • 这个例子对我来说很好(我做了一个新项目并复制了你的代码)。我注意到的唯一问题是您的实体应该有一个默认的无参数构造函数,但即使没有构造函数,存储库也是可注入的。确保所有类都在同一个包(或TestApplication 的子包)中,并确保您已正确构建代码。

标签: java spring maven spring-data-jpa


【解决方案1】:

这里有几种可能性。

您需要将@EnableJpaRepositories(basePackages = {"your.pkg.here"}) 添加到TestApplication。这告诉 Spring Data 在指定的包下查找您的存储库类。如果仓库包名与TestApplication相同,可以跳过basePackages部分。

同样,如果您的TestApplicationSimpRepository 不在同一个包中,您需要在所有相关包的列表中添加@ComponentScan

【讨论】:

  • 这听起来很合理,据记录它们在同一个包中,但我试图弄清楚为什么它在我发布链接的 Spring Demo 项目中有效,但不起作用对于我发布的项目。两者在功能上似乎相同,但我知道两者之间一定存在一些细微差别。演示项目的文件也在同一个包中,并且没有对 EnableJpaRepositories 的引用
  • @IcedD​​ante 嗯,该教程明确指出,只有当您的包不同时,您才需要 @EnableJpaRepositories。但是,无论如何,我总是需要添加注释。
【解决方案2】:

我错过了一个简单的@Component 上课。这可能是一个基本问题。

【讨论】:

    【解决方案3】:

    在您的存储库类上方添加一个简单的@Repository 注释,它将正常工作。

    【讨论】:

      【解决方案4】:

      我有一个类似的问题IDEA-271551 刚刚用 JetBrains 打开。请点赞。

      在我的情况下,我通过使用 @Repository 构造型显式注释我的存储库接口来解决(不是实际解决方案,而是解决方法)它。

      但是,我也注意到,如果我稍后再次删除注释,IDE 将不再抱怨。

      奇怪,但在我的情况下确实发生了。

      【讨论】:

      • 我也遇到了同样的问题并投了赞成票
      【解决方案5】:

      我忘了添加 " annotationProcessor >> " 在依赖项之间 在 build.gradle 中。 我添加时已修复。

        dependencies {
          
          implementation  libs.mapstruct
          implementation  libs.mapstructprocessor
          implementation  libs.lombok
      
          annotationProcessor libs.lombok
          annotationProcessor libs.mapstructprocessor
      }
      

      【讨论】:

        猜你喜欢
        • 2019-09-16
        • 2014-10-06
        • 2020-01-31
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 2016-09-30
        • 2019-06-14
        相关资源
        最近更新 更多