Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"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;
    }
}
like image 744
IcedDante Avatar asked Oct 09 '16 04:10

IcedDante


3 Answers

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.

like image 119
metacubed Avatar answered Nov 18 '22 04:11

metacubed


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

like image 36
inquisitive Avatar answered Nov 18 '22 04:11

inquisitive


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

like image 20
david-so Avatar answered Nov 18 '22 05:11

david-so