找不到Bean错误:通过字段表达的不满意依赖性

时间:2019-07-04 07:14:40

标签: spring spring-boot

我有以下主要应用程序:-

两个软件包都在不同的模块中,并且我有“ com.app.batch的pom.xml中包含com.app.api

    //commented  @SpringBootApplication(scanBasePackages={"com.app.batch", "com.app.api"})
        public class App 
        {
            public static void main( String[] args )
            {

                 SpringApplication.run(App.class, args);
            }
        }

com.app.api中,我有ApiClass

@Service
public class ApiClass {}

在我拥有的com.app.batch中

@Component
public class JobRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        // TODO Auto-generated method stub
        apiClass.getData(1111);
    }
}

当我评论@SpringBootApplication(scanBasePackages={"com.app.batch", "com.app.api"})时出现以下错误

  

com.app.batch.config.JobRunner中的字段apiClass需要一个Bean   键入找不到的“ com.com.api.ApiClass”。

我如何不使用scanBasePackages来解决此问题。我不想使用scanBasePackages,因为将来可以添加该模块,并且可能导致cumberson

2 个答案:

答案 0 :(得分:1)

如果您不想使用

@SpringBootApplication(scanBasePackages={"com.app.batch", "com.app.api"})

您需要更改程序包层次结构,以便Spring轻松扫描Bean。

您的主SpringBootApplication类应位于com.app包中  其余类应放在子包中。 像com.app.batch and com.app.api一样是com.app

的子包

通过使用这种包层次结构,您不需要scanBasePackages。

答案 1 :(得分:0)

App类的包是什么?

它必须位于基本软件包中,以便Spring Boot Application扫描其中的所有软件包。

@SpringBootApplication注释可单独启用以下注释/功能:

  1. @EnableAutoConfiguration:启用Spring Boot的自动配置机制
  2. @ComponentScan:在应用程序所在的软件包上启用@Component扫描
  3. @Configuration:允许在上下文中注册额外的bean或导入其他配置类

有关更多详细信息,您可以阅读here