gpt4 book ai didi

java - 无法 Autowiring 。未找到 'NoteRepository' 类型的 beans

转载 作者:行者123 更新时间:2023-12-02 07:36:22 24 4
gpt4 key购买 nike

我的 Controller 类如下。

@Controller
public class app {

@GetMapping(path = "/")
public @ResponseBody
String hello() {
return "Hello app";
}
}

当我浏览网址时,它工作正常。但是,当添加下面的代码时,它会显示“无法 Autowiring 。找不到'NoteRepository'类型的bean”

@Autowired
NoteRepository noteRepository;

// Create a new Note
@PostMapping("/notes")
public Note createNote(@Valid @RequestBody Note note) {
return noteRepository.save(note);
}

应用程序 Controller 类与主类(运行应用程序)位于同一个包中。但是当我们将上面的代码添加到不同包中的 Controller 时,它不显示错误。但当我们通过 url 导航时,即使是简单的 get 方法,它也不起作用。

我的主要类(class)如下。

@SpringBootApplication
@EnableJpaAuditing
public class CrudApplication {

public static void main(String[] args) {
SpringApplication.run(CrudApplication.class, args);
}
}

我的存储库类是

@Repository
public interface NoteRepository extends JpaRepository<Note, Long> {
}

我的项目结构

Image 1

我想找到解决方案:

  1. 注入(inject) NoteRepository 的实例。我总是收到消息“无法 Autowiring 。未找到类型的 beans”错误。 Spring 无法注入(inject)它,无论该接口(interface)位于同一个包还是不同的包中。

  2. 我无法在 Controller (MyController) 中运行与应用程序入口点位于不同包中的方法。

enter image description here

最佳答案

主要症状是这样的:

App controller class is in the same package where main class(which run the application) is. but when we add above code to a controller in different package it doesn't show error. but it doesn't work when we navigate through url even a simple get method.

默认情况下,Spring Boot应用程序只会自动发现在与主类相同的包中声明的bean。对于不同包中的 bean,您需要指定包含它们。您可以使用@ComponentScan为此。

package foo.bar.main;

//import statements....

//this annotation will tell Spring to search for bean definitions
//in "foo.bar" package and subpackages.
@ComponentScan(basePackages = {"foo.bar"})
@SpringBootApplication
@EnableJpaAuditing
public class CrudApplication {

public static void main(String[] args) {
SpringApplication.run(CrudApplication.class, args);
}
}



package foo.bar.controller;

//import statements....

//since @ComponentScan, now this bean will be discovered
@Controller
public class app {

@GetMapping(path = "/")
public @ResponseBody
String hello() {
return "Hello app";
}
}

为了让 Spring Data 识别应创建哪些存储库,您应该在主类中添加 @EnableJpaRepositories 注释。另外,为了让 Spring Data 和 JPA 实现扫描实体,请添加 @EntityScan:

@ComponentScan(basePackages = {"foo.bar"})
@SpringBootApplication
@EnableJpaAuditing
@EnableJpaRepositories("your.repository.packagename")
@EntityScan("your.domain.packagename")
public class CrudApplication {
//code...
}

关于java - 无法 Autowiring 。未找到 'NoteRepository' 类型的 beans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48616351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com