Как просмотреть список путей к классам, отсканированных @ComponentScan для разрешения исключения NoSuchBeanDefinitionException - PullRequest
1 голос
/ 17 апреля 2020

В приложении Spring boot 1.5.9 у меня есть @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.

The 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, но я не смог ее решить, как я могу копать дальше и видеть список использованных classpath во время @ComponentScan("com.kopaxgroup.api")?

1 Ответ

1 голос
/ 17 апреля 2020

При использовании Springboot вы можете видеть все созданные bean-компоненты, или создание bean-компонента было отклонено (из-за несоответствия некоторых условий).

Этот список bean-компонентов в контексте приложения предоставляется ConditionEvaluationReportLoggingListener

Чтобы напечатать эти bean-компоненты: поместите это в application.properties logging.level.org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener=debug

Я не могу найти какой пакет ConfigurationReportLoggingInitializer находится, потому что именно класс отвечает за печать bean-компонентов в Springboot версии 1.5.9. Обходной путь должен обеспечить следующие свойства: logging.level.root=debug. И тогда CTRL + F ConfigurationReportLoggingInitializer.

...