【问题标题】:Question - @ComponentScan(basePackageClasses = AdminController.class) <- why has it broken my application?问题 - @ComponentScan(basePackageClasses = AdminController.class) <- 为什么它破坏了我的应用程序?
【发布时间】:2020-12-13 05:36:24
【问题描述】:

我遇到了一个我无法理解的问题,那就是:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method setApplicant in webService.controller.RequestController required a bean of type 'com.service.applicant.Applicant' that could not be found.


Action:

Consider defining a bean of type 'com.service.applicant.Applicant' in your configuration.

我已经做了一些研究,但我仍然无法解决这个问题,我只是从我的主应用程序类中删除了 @ComponentScan 并且它起作用了。

我删除了:

//@ComponentScan(basePackageClasses = AdminController.class)

一切都很好,但我很好奇...有人可以帮帮我吗?

【问题讨论】:

  • 你需要显示你项目的主包和子包结构

标签: java spring spring-boot java-web-start


【解决方案1】:

当您不显式使用@ComponentScan 时,您的主类上的@SpringBootApplication 注解会在其中实现@ComponentScan(以及@EnableAutoConfiguration)。因此,所有标记为@component(或类似的注解,如控制器、服务等)的类都会被自动扫描,前提是它们位于定义主类的同一包或子包中。

现在,在您的情况下,您在主类中添加了 //@ComponentScan(basePackageClasses = AdminController.class)。这样做的原因是它只为 AdminController 类创建了 bean,而忽略了所有其他类。

【讨论】:

    【解决方案2】:

    您应该首先用@Component 注释类Applicant。 在你的主类中用@ConfigurationEnableAutoConfiguration@ComponentScan({"com.service.applicant","your.admin.controller.path"})注释对象。

    RequestController 类中,用@Autowire 注释Applicant 类型的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-16
      • 2011-05-06
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      相关资源
      最近更新 更多