spring xx服务中的字段xx需要类型为的Bean

0pizxfdo  于 2022-12-10  发布在  Spring
关注(0)|答案(2)|浏览(203)

我得到下一个错误:
找不到com.myproject.services.ansService中的字段ansRepo所需的类型为“com.myproject.repositories.ansRepo”的Bean。
我有一个控制器,它有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> {
...
}

控制器中的第一个autowired对象会出现该错误,因此看起来Spring应用程序无法找到autowired类。
我的项目结构:

-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注解的问题。我看到有很多关于这个错误的帖子,但是在我的例子中,我已经实现了所有提供的解决方案。
我还应该检查什么?

更新

我在主应用程序中添加了@EnableJpaRepositories(“com.myproject.repositories”)注解。
找不到com.postmalone.services.AnswService中的字段ansRepo所需的名为“entityManagerFactory”的Bean。
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时,为什么我需要提到@ EnableJPARepositiory注解?为什么我会得到这个错误?

u1ehiz5o

u1ehiz5o1#

好的,我注意到你没有一个根包,它应该被控制器,实体,仓库和服务共享。为了在根包的开始扫描,只需通过以下方式添加:

@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
d8tt03nd

d8tt03nd2#

在我的例子中,解决方案只是在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>

相关问题