SpringBoot JPA @Autowired找不到bean异常

时间:2019-04-05 12:47:24

标签: java spring-boot spring-mvc jpa autowired

已编辑以添加proc结构:

main / java    你好(包)      应用程序(主应用程序)      TestRestController    型号(包装)      测试    服务(套餐)      TestRepo(接口)

我正在查看组件扫描,因为它只是发布了“ repo.Test”,只是一个线索。

我经历了许多教程和问题,但仍然找不到我特定问题的答案,这很可能是由于我缺乏理解。

我有一个向其中添加数据库的spring boot应用程序。我一直在关注本教程: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)具有实现接口和bean配置类的服务。 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注释,看看是否引起了问题。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您将收到此异常,因为您的类TestReporepo程序包的一部分,而不是Application类程序包的子程序包层次结构。 @SpringBootApplication对作为主类(即Application的子包)的包定义自动组件扫描。如果您想在不更改程序包层次结构的情况下解决此问题,请在@SpringBootApplication行下面添加

@ComponentScan({"repo","your.application.class.package"}) //// add the names of the packages where the controllers, services, repositories beans are stored