抛出NoSuchBeanDefinitionException

时间:2019-10-03 08:23:15

标签: java spring spring-boot

所以我试图使用在另一个类中生成的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);

    }


}

因此,基本上在线程“主”中有一个异常org.springframework.beans.factory.NoSuchBeanDefinitionException:没有抛出类型为com.simon.spring.basics.properties.SomeExternalService的合格Bean。 我该怎么做才能解决此错误并避免以后出现相同的问题

1 个答案:

答案 0 :(得分:2)

SpringIn5StepsPropertiesApplication放入包根目录;

package com.simon.spring.basics

还删除不必要的@ComponentScan()


@SpringBootApplication将自动从主类(即com.simon.spring.basics)的位置在所有包下触发组件扫描,因此可以提取com.simon.spring.basics.properties中的组件。

否则,它将尝试在com.simon.spring.basics.springin5steps下查找bean,而找不到SomeExternalService


如果无法移动主类,则可以添加其他包,例如;

@SpringBootApplication(scanBasePackageClasses = {com.simon.spring.basics.properties.SomeExternalService.class})