我有以下主要应用程序:-
两个软件包都在不同的模块中,并且我有“ 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
答案 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
注释可单独启用以下注释/功能:
@EnableAutoConfiguration
:启用Spring Boot的自动配置机制@ComponentScan
:在应用程序所在的软件包上启用@Component扫描@Configuration
:允许在上下文中注册额外的bean或导入其他配置类有关更多详细信息,您可以阅读here