org.sf.beans.factory.NoSuchBeanDefinitionException

我正在尝试在 Spring Boot 中使用 Hibernate 作为 JPA 的用户存储库设置一个简单的项目,我尝试了这个和这个教程,并且在这两个(以及任何地方)@SpringBootApplication似乎足以使存储库在整个应用程序的范围内都可以访问,因为它包括@ComponentScan,但就我而言,情况并非如此。即使这个答案看起来适合我的情况,但不是。


项目结构


project

│   └── src

│       └── main

│           └── java

│               └── medisam

|                    └── Application.java

│   └── src

│       └── main

│           └── java

│               └── medisam

│                   └── entity

│                       └── User.java

|                       └── UserRepository.java

│    └── src

│        └── main

│            └── java

│               └── medisam

│                   └── controller

│                       └── MainController.java

有了这样的结构和这段代码:


@SpringBootApplication

public class Application {

    ...

    private static final Logger LOG = LoggerFactory.getLogger(Application.class);

    @Autowired

    private UserRepository repo;


    public static void main(String args[]) {

        SpringApplication.run(Application.class, args);

    }

    ...

}

我得到:


...创建名为 “应用程序”的 bean 时出错:通过字段“repo”表达的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException :没有 可用的“medisam.entity.UserRepository” 类型的合格 bean :预计至少有 1 个 bean 有资格作为 自动装配 候选。依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true)} ...


只有当我这样做时:


@ComponentScan(basePackages = {"medisam.controller", "medisam.entity"})

@EntityScan({"medisam.entity"})

@EnableJpaRepositories(basePackages = {"medisam.entity"})

public class Application {

    ...

    private static final Logger LOG = LoggerFactory.getLogger(Application.class);

    @Autowired

    private UserRepository repo;


    public static void main(String args[]) {

        SpringApplication.run(Application.class, args);

    }

    ...

}

我得到了一个工作代码,但是,如果真的有一种方法可以实现这一点@SpringBootApplication,我想使用它。


会不会@SpringBootApplication是扫描不正确?


请帮忙


暮色呼如
浏览 169回答 1
1回答

摇曳的蔷薇

我在 gihub 上查看了您的代码,发现您在 classApplication.java和ServiceResponse.java.请导入主包,package medisam;而不是package hello;.像下面这样:您的应用程序类:package medisam;import medisam.entity.UserRepository;import nz.net.ultraq.thymeleaf.LayoutDialect;import nz.net.ultraq.thymeleaf.decorators.strategies.GroupingStrategy;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Description;import org.springframework.web.servlet.view.InternalResourceViewResolver;import org.springframework.web.servlet.view.JstlView;import org.thymeleaf.extras.java8time.dialect.Java8TimeDialect;import org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect;import org.thymeleaf.spring5.SpringTemplateEngine;import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;import org.thymeleaf.spring5.view.ThymeleafViewResolver;import org.thymeleaf.templatemode.TemplateMode;import org.thymeleaf.templateresolver.ITemplateResolver;import org.thymeleaf.templateresolver.UrlTemplateResolver;@SpringBootApplicationpublic class Application {这是您的 ServiceResponsepackage medisam;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;import org.apache.catalina.util.ResourceSet;import java.util.ArrayList;import java.util.List;@JsonIgnoreProperties(ignoreUnknown = true)public class ServiceResponse {
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java