IcedDante
IcedDante

Reputation: 6842

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

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

Upvotes: 26

Views: 138837

Answers (6)

MaduKan
MaduKan

Reputation: 680

I had a quite a flat package structure (notice that I don't have the usual com.x.y.z in my application) hence met this issue. Following @ComponentScan fixed the issue:

@SpringBootApplication
@ComponentScan(basePackages = {"services", "views", "database"})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

You don't need this explicit definitions if your Spring Application class too is in the same package hierarchy.

Upvotes: 0

Ali ERG&#220;L
Ali ERG&#220;L

Reputation: 1

I forgot to add " annotationProcessor <<<-libs.mapstructprocessor->>> " among Dependencies in build.gradle. It was fixed when I added it.

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

    annotationProcessor libs.lombok
    annotationProcessor libs.mapstructprocessor
}

Upvotes: 0

Asif Kamran Malick
Asif Kamran Malick

Reputation: 3241

I have a similar issue IDEA-271551 just opened with JetBrains. Please upvote it.

In my case I resolved(not actual resolution,but workaround) it by explicitly annotating my repository interface with @Repository stereotype.

However, I also noticed that later if I again remove the annotation the IDE no longer complains.

Strange, but it did happen in my case.

Upvotes: 0

david-so
david-so

Reputation: 371

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

Upvotes: 3

inquisitive
inquisitive

Reputation: 3974

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

Upvotes: 4

metacubed
metacubed

Reputation: 7281

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.

Upvotes: 23

Related Questions