xx服务中的字段xx需要一个类型为bean的bean

时间:2019-01-06 08:08:58

标签: java spring javabeans

我遇到下一个错误:

Field ansRepo in com.myproject.services.ansService required a bean of type 'com.myproject.repositories.ansRepo' that could not be found.

我有一个控制器,该控制器具有4个带有自动连线注释的服务:

@RestController
public class Controller {


@Autowired
private AnsService ansService

@Autowired
private QService QService;

@Autowired
private UService UService;

每个服务都有@Service批注:

@Service
public class ansService {

@Autowired
private AnsRepo ansrepo;

每个存储库还具有@Repository批注:

@Repository
public interface AnsRepo extends JpaRepository<Ans,Long> {
...
}

该错误出现在控制器中的第一个自动装配对象上,因此似乎spring应用程序找不到自动装配类。

我的项目的结构:

-com.myproject
----Main.java
----controllers
------------Controller.java
----entities
------------ans.java
----repositories
------------ansRepo.java
----services
------------ansService.java

我的主要人:

package com.postmalone.Application;

import org.springframework.boot.SpringApplication;

 @SpringBootApplication(scanBasePackages={"com.myproject.controllers", 
 "com.myproject.services", "com.myproject.repositories", 
 "com.myproject.entities"})

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

我很确定问题出在@SpringBootApplication注释中。我看到有很多关于此错误的帖子,但就我而言,我已经实现了所提供的所有解决方案。

您知道我还要检查什么吗?

---- UPDATE ---

我在主应用程序中添加了@EnableJpaRepositories(“ com.myproject.repositories”)批注。现在我得到了下一个错误:

Field ansRepo in com.postmalone.services.AnswService required a bean named 'entityManagerFactory' that could not be found.

pom.xml文件中的依赖项:

<dependencies>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.1.4</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.3.6.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>2.1.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.3.6.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>

</dependencies>

有人知道为什么在拥有@SpringBootApplication时为什么需要提及@EnableJPARepostiory批注?以及为什么我会收到该错误?

2 个答案:

答案 0 :(得分:0)

好的,我注意到您没有一个根包,控制器,实体,存储库和服务应该共享该根包。 为了扫描根包的开头,只需按以下方式添加:

 @SpringBootApplication(scanBasePackages = "com.myproject")

并通过以下方式重命名其他软件包:

 com.myproject 
    >   Main.java
 com.myproject.controllers
    >   Controller.java
 com.myproject.entities
    >   Ans.java
 com.myproject.repositories
    >   AnsRepo.java
 com.myproject.services
    >   AnsService.java

答案 1 :(得分:0)

在我的情况下,解决方案是在pom.xml中添加下一个依赖项:

        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>

而不是:

    <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.3.6.Final</version>
</dependency>