NoSuchBeanDefinitionException выдается - PullRequest
       2

NoSuchBeanDefinitionException выдается

1 голос
/ 03 октября 2019

Поэтому я пытаюсь использовать bean-компонент, сгенерированный в другом классе, для использования в основном приложении

    package com.simon.spring.basics.properties;

    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.beans.factory.annotation.Value;

    import org.springframework.stereotype.Component;

    @Component
    public class SomeExternalService {

        @Value("${external.service.url}")

        private String url;

        public String returnServiceURL(){
            return url;
        }
    }

И основное приложение здесь:

    package com.simon.spring.basics.springin5steps;

    import com.simon.spring.basics.properties.SomeExternalService;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;

@Configuration
    @SpringBootApplication
    //@PropertySource("classpath:application.properties")
    @ComponentScan()
    public class SpringIn5StepsPropertiesApplication {

        public static void main(String[] args) {

            ApplicationContext applicationContext =
                    SpringApplication.run(SpringIn5StepsPropertiesApplication.class, args);
            SomeExternalService service = applicationContext.getBean(SomeExternalService.class);
            System.out.println(service);

    }


}

Так что в основномИсключение в потоке "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: отсутствует доступный квалифицирующий компонент типа 'com.simon.spring.basics.properties.SomeExternalService'. Что я могу сделать, чтобы исправить эту ошибку и избежать таких же проблем позже

1 Ответ

2 голосов
/ 03 октября 2019

Поместите SpringIn5StepsPropertiesApplication в корневой каталог вашего пакета;

package com.simon.spring.basics

также удалите ненужные @ComponentScan()


@SpringBootApplication автоматически запустит сканирование компонентов всех пакетов израсположение основного класса, а именно com.simon.spring.basics, поэтому ваш компонент в com.simon.spring.basics.properties может быть выбран.

В противном случае он попытается найти bean-компоненты в com.simon.spring.basics.springin5steps и не сможет найти SomeExternalService


Если перемещение основного класса невозможно, вы можете добавить другой пакет, например;

@SpringBootApplication(scanBasePackageClasses = {com.simon.spring.basics.properties.SomeExternalService.class})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...