问题 - @ComponentScan(basePackageClasses = AdminController.class) <- 为什么它破坏了我的应用程序?

Question - @ComponentScan(basePackageClasses = AdminController.class) <- why has it broken my application?

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

***************************
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.

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

我删除了:

//@ComponentScan(basePackageClasses = AdminController.class)

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

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

在 class RequestController 中将类型 Applicant 的 属性 注释为 @Autowire

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

现在,在您的案例中,您在主 class 中添加了 //@ComponentScan(basePackageClasses = AdminController.class)。这是做什么的,它只为 class AdminController 创建了 bean 并忽略了所有其他 classes.