虽然使用spring boot和maven将我们的项目模块化为不同的独立maven项目,但我们遇到了一个问题,即多模块maven项目中bean的自动装配不起作用。
为了概述这个问题,下面是迄今为止开发的独立maven项目
以下是依赖结构 RewardsApp->奖励 - > DBservices1 - > Coreservices
问题是Rewards和DBservices1中使用@Autowired
注释来获取@Service
/ @Repository
注释的地图服务在RewardsApp
项目中不可用。
作为一种解决方法,我们在RewardsApp
中使用@Bean
注释配置了bean,然后服务可供服务器成功启动。
使用这种方法,我们需要手动配置依赖项目中使用的RewardsApp
中的所有bean。
我们的应用程序中有许多服务和存储库,我们认为创建这样的bean不是正确的方法,因为需要创建许多bean。
请注意,我们已经在所有项目中创建了所有弹簧启动控制器,服务和存储库
包com.company.application
以下是主要课程的片段:
@SpringBootApplication
@ComponentScan(basePackages = {"com.company.application"})
public class RewardsApp extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(RewardsApp.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(RewardsApp.class);
}
}
/**
*Manual beans in RewardsApp
**/
@Bean
public SomeService someService()
{
return new SomeService();
}
答案 0 :(得分:2)
如何为每个模块配置一个配置类(带有相关的comp扫描)并将这些配置导入到您的应用程序类中?
@SpringBootApplication
@ComponentScan(...)
@Import({RewardsContext.class, DBservicesContext.class})
...
答案 1 :(得分:1)
通过在RewardsApp.java中添加以下注释为我做了诀窍,现在自动装配正在为罐子里面的类工作
@ComponentScan(basePackages = {"com.company"})
@EntityScan(basePackages = {"com.company"})
@EnableJpaRepositories(basePackages = {"com.company"})
我猜以上是针对服务,实体(域名),存储库