SpringBoot JPA @Autowired 没有发现bean异常
SpringBoot JPA @Autowired no bean found exception
编辑以添加 proc 结构:
main/java
你好(包裹)
应用程序(主应用程序)
测试休息控制器
机型(包)
测试
服务(包)
TestRepo(接口)
我目前正在查看组件扫描,因为刚刚发布了异常中的 'repo.Test' 是一个线索。
我已经阅读了无数教程和问题,但仍然找不到我的特定问题的答案,这很可能是因为我缺乏理解。
我有一个 spring 引导应用程序,我正在向其添加数据库。我一直在学习本教程:https://www.callicoder.com/spring-boot-rest-api-tutorial-with-mysql-jpa-hibernate/
然而,当我尝试 运行 我的应用程序(遵循相同的步骤)时,我得到一个异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'testRestController': Unsatisfied dependency expressed through field 'testRepo'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'repo.TestRepo' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我确实有另一个自动装配的 bean,主要区别在于这个 bean(工作的那个)有一个实现接口的服务和一个 bean 配置 class。 None JPA 示例遵循该模型,创建服务以重新实现 JPARepo 中的方法似乎很愚蠢。
这是我正在使用的控制器:
@RestController
public class TestRestController {
@Autowired
GreetingService greetingService;
@Autowired
TestRepo testRepo;
@RequestMapping("/hello")
public String home() {
return greetingService.greet();
}
@RequestMapping("/testrepo")
public String testrepo() {
Test test = new Test("steve");
testRepo.save(test);
Long idOftest = test.getId();
test = null;
test = testRepo.findById(idOftest).get();
return "DID THIS WORK::::: + "+ test.toString();
}
接口为
@Repository
public interface TestRepo extends JpaRepository<Test, Long> {
}
和模型:
@Entity
@Data
public class Test {
private final String name;
public Test(String name){
this.name = name;
}
@Id
@GeneratedValue
private Long id;
public Long getId(){
return this.id;
}
}
应用主要是:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
// @Bean
// public CommandLineRunner commandLineRunner(ApplicationContext ctx ) {
// return args -> {
//
// System.out.println("Let's inspect the beans provided by Spring Boot:");
//
// String[] beanNames = ctx.getBeanDefinitionNames();
// Arrays.sort(beanNames);
// for (String beanName : beanNames) {
// System.out.println(beanName);
// }
//
//
// };
// }
}
我最近注释掉了 bean 注释,看看它是否导致了问题。
提前感谢您的帮助!
你得到这个异常是因为你的 class TestRepo
是 repo
包的一部分,它不是 Application
[=19= 的子包层次结构] 包裹。 @SpringBootApplication
定义了对包的自动组件扫描,这些包是主 class 的子包,即 Application
。如果您想在不更改包层次结构的情况下解决此问题,请添加以下行 @SpringBootApplication
:
@ComponentScan({"repo","your.application.class.package"}) //// add the names of the packages where the controllers, services, repositories beans are stored
编辑以添加 proc 结构:
main/java 你好(包裹) 应用程序(主应用程序) 测试休息控制器 机型(包) 测试 服务(包) TestRepo(接口)
我目前正在查看组件扫描,因为刚刚发布了异常中的 'repo.Test' 是一个线索。
我已经阅读了无数教程和问题,但仍然找不到我的特定问题的答案,这很可能是因为我缺乏理解。
我有一个 spring 引导应用程序,我正在向其添加数据库。我一直在学习本教程:https://www.callicoder.com/spring-boot-rest-api-tutorial-with-mysql-jpa-hibernate/
然而,当我尝试 运行 我的应用程序(遵循相同的步骤)时,我得到一个异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'testRestController': Unsatisfied dependency expressed through field 'testRepo'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'repo.TestRepo' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我确实有另一个自动装配的 bean,主要区别在于这个 bean(工作的那个)有一个实现接口的服务和一个 bean 配置 class。 None JPA 示例遵循该模型,创建服务以重新实现 JPARepo 中的方法似乎很愚蠢。
这是我正在使用的控制器:
@RestController
public class TestRestController {
@Autowired
GreetingService greetingService;
@Autowired
TestRepo testRepo;
@RequestMapping("/hello")
public String home() {
return greetingService.greet();
}
@RequestMapping("/testrepo")
public String testrepo() {
Test test = new Test("steve");
testRepo.save(test);
Long idOftest = test.getId();
test = null;
test = testRepo.findById(idOftest).get();
return "DID THIS WORK::::: + "+ test.toString();
}
接口为
@Repository
public interface TestRepo extends JpaRepository<Test, Long> {
}
和模型:
@Entity
@Data
public class Test {
private final String name;
public Test(String name){
this.name = name;
}
@Id
@GeneratedValue
private Long id;
public Long getId(){
return this.id;
}
}
应用主要是:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
// @Bean
// public CommandLineRunner commandLineRunner(ApplicationContext ctx ) {
// return args -> {
//
// System.out.println("Let's inspect the beans provided by Spring Boot:");
//
// String[] beanNames = ctx.getBeanDefinitionNames();
// Arrays.sort(beanNames);
// for (String beanName : beanNames) {
// System.out.println(beanName);
// }
//
//
// };
// }
}
我最近注释掉了 bean 注释,看看它是否导致了问题。
提前感谢您的帮助!
你得到这个异常是因为你的 class TestRepo
是 repo
包的一部分,它不是 Application
[=19= 的子包层次结构] 包裹。 @SpringBootApplication
定义了对包的自动组件扫描,这些包是主 class 的子包,即 Application
。如果您想在不更改包层次结构的情况下解决此问题,请添加以下行 @SpringBootApplication
:
@ComponentScan({"repo","your.application.class.package"}) //// add the names of the packages where the controllers, services, repositories beans are stored