如何查看@ComponentScan 扫描的类路径列表以解决 NoSuchBeanDefinitionException
How to see the list of classpath scanned by @ComponentScan to resolve NoSuchBeanDefinitionException
在 Spring 引导 1.5.9 应用程序中,我的主 class 上有 @SpringBootApplication
。
我也有 @KopaxgroupApi
注释,带有 :
@Retention(RUNTIME)
@Target(TYPE)
@Import(KopaxgroupApiConfig.class)
public @interface KopaxgroupApi {
@AliasFor(annotation = Import.class, attribute = "value")
Class<?>[] value() default { KopaxgroupApiConfig.class };
}
KopaxgroupApiConfig.class
为:
@Configuration
@ComponentScan(basePackages = { KopaxgroupApiConfig.CLASSPATH })
public class KopaxgroupApiConfig {
public static final String CLASSPATH = "com.kopaxgroup.api";
}
我在 com.kopaxgroup.api.customerManagement.callMeBack
中创建了一个新项目,我在目录 repository
和 service
.
中分别存储了存储库和服务
CallMeBackServiceImpl
找不到CallMeBackRepository
。
我在启动时遇到以下错误:
Application failed to start due to an exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.kopaxgroup.api.customerManagement.callMeBack.repository.CallMeBackRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)
Parameter 0 of constructor in com.kopaxgroup.api.customerManagement.callMeBack.service.impl.CallMeBackServiceImpl required a bean of type 'com.kopaxgroup.api.customerManagement.callMeBack.repository.CallMeBackRepository' that could not be found.
Action:
Consider defining a bean of type 'com.kopaxgroup.api.customerManagement.callMeBack.repository.CallMeBackRepository' in your configuration.
我试图将 CallMeBackRepository
移动到 com.kopaxgroup.api.customerManagement.callMeBack.service.impl
但错误仍然存在。
我有一些类似的包,它们都可以启动,我在配置上没有看到任何差异。
创建新 jar 时会发生这种情况。
我添加了一堆@ComponentScan
但我无法解决它,我如何进一步挖掘并查看@ComponentScan("com.kopaxgroup.api")
期间使用的class路径列表?
您可以看到在 Springboot 中创建或拒绝的所有 beans 以及创建和拒绝的原因。
应用程序上下文中的 bean 列表由 ConditionEvaluationReportLoggingListener
提供
要打印那些 beans:将其放入 application.properties logging.level.org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener=debug
我无法找到 ConfigurationReportLoggingInitializer
所在的包,因为那是负责在 Springboot 1.5.9 版中打印 bean 的 class。解决方法是提供以下属性:logging.level.root=debug
。然后 CTRL + F ConfigurationReportLoggingInitializer
.
在 Spring 引导 1.5.9 应用程序中,我的主 class 上有 @SpringBootApplication
。
我也有 @KopaxgroupApi
注释,带有 :
@Retention(RUNTIME)
@Target(TYPE)
@Import(KopaxgroupApiConfig.class)
public @interface KopaxgroupApi {
@AliasFor(annotation = Import.class, attribute = "value")
Class<?>[] value() default { KopaxgroupApiConfig.class };
}
KopaxgroupApiConfig.class
为:
@Configuration
@ComponentScan(basePackages = { KopaxgroupApiConfig.CLASSPATH })
public class KopaxgroupApiConfig {
public static final String CLASSPATH = "com.kopaxgroup.api";
}
我在 com.kopaxgroup.api.customerManagement.callMeBack
中创建了一个新项目,我在目录 repository
和 service
.
CallMeBackServiceImpl
找不到CallMeBackRepository
。
我在启动时遇到以下错误:
Application failed to start due to an exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.kopaxgroup.api.customerManagement.callMeBack.repository.CallMeBackRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)
Parameter 0 of constructor in com.kopaxgroup.api.customerManagement.callMeBack.service.impl.CallMeBackServiceImpl required a bean of type 'com.kopaxgroup.api.customerManagement.callMeBack.repository.CallMeBackRepository' that could not be found.
Action:
Consider defining a bean of type 'com.kopaxgroup.api.customerManagement.callMeBack.repository.CallMeBackRepository' in your configuration.
我试图将 CallMeBackRepository
移动到 com.kopaxgroup.api.customerManagement.callMeBack.service.impl
但错误仍然存在。
我有一些类似的包,它们都可以启动,我在配置上没有看到任何差异。
创建新 jar 时会发生这种情况。
我添加了一堆@ComponentScan
但我无法解决它,我如何进一步挖掘并查看@ComponentScan("com.kopaxgroup.api")
期间使用的class路径列表?
您可以看到在 Springboot 中创建或拒绝的所有 beans 以及创建和拒绝的原因。
应用程序上下文中的 bean 列表由 ConditionEvaluationReportLoggingListener
要打印那些 beans:将其放入 application.properties logging.level.org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener=debug
我无法找到 ConfigurationReportLoggingInitializer
所在的包,因为那是负责在 Springboot 1.5.9 版中打印 bean 的 class。解决方法是提供以下属性:logging.level.root=debug
。然后 CTRL + F ConfigurationReportLoggingInitializer
.