"Could not autowire. No beans of type... found" with Simple project

82,623

Solution 1

A couple of possibilities here.

You need to add the @EnableJpaRepositories(basePackages = {"your.pkg.here"}) to the TestApplication. This tells Spring Data to look for your repository classes under the specified package. If the repository package name is the same as the TestApplication, you can skip the basePackages part.

Similarly, if your TestApplication and SimpRepository are not in the same package, you need to add a @ComponentScan with the list of all relevant packages.

Solution 2

I missed a simple @Component for the class. This could be one basic problem.

Solution 3

Add a simple @Repository annotation above your repository class and it will work fine.

Share:
82,623
IcedDante
Author by

IcedDante

Updated on July 09, 2022

Comments

  • IcedDante
    IcedDante almost 2 years

    I downloaded the simple JPA Spring Boot tutorial and it worked just fine. However, when I attempt to replicate this simple behavior in my own test project, I get a "could not autowire" error on the bean injection in my Application.demo() method that returns a CommandLineRunner. The project is so barebones I don't even know what to submit but here's the 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>
    

    And the application.

    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) -> {
    
            };
        }
    }
    

    And the Repository service:

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

    for the following entity:

    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;
        }
    }