Spring Boot在maven多模块项目中,自动装配bean不起作用
问题描述:
尽管使用spring boot和maven将我们的项目模块化为不同的独立maven项目,但我们遇到了一个问题,那就是多模块maven项目中的bean自动装配不起作用。Spring Boot在maven多模块项目中,自动装配bean不起作用
只给你这个问题的概述,下面是迄今为止开发独立的Maven项目
- Coreservices - 包含整个应用程序的春天启动域对象:输出JAR
- DBservices1 - 包含弹簧启动存储库和服务(数据库服务)来访问数据库:输出JAR
- 奖励 - 包含奖励模块相关的文件(控制器,服务(业务逻辑服务),查看):输出JAR
- RewardsApp-独立DEPL oyable Maven项目:输出WAR
下面是依赖结构 RewardsApp->奖励 - > DBservices1 - > Coreservices
的问题是奖励和DBservices1用于获取映射服务@Autowired
注解与@Service
/@Repository
不适用于RewardsApp
项目。
作为解决方法,我们已经使用@Bean
注释配置了RewardsApp
中的bean,然后这些服务可供服务器成功启动。 通过这种方法,我们需要手动配置依赖项目中使用的RewardsApp
中的所有bean。 我们的应用程序中有许多服务和存储库,我们认为创建这样的bean并不是一个正确的方法,因为需要创建许多bean。
请注意,我们已经创造下 包com.company.application
下面所有的春天启动控制器,服务,repositorys在所有项目的主类的片段:
@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();
}
答
通过RewardsApp.java添加下面的注释的伎俩对我来说,现在自动装配工作为类的罐子
@ComponentScan(basePackages = {"com.company"})
@EntityScan(basePackages = {"com.company"})
@EnableJpaRepositories(basePackages = {"com.company"})
我想上面是服务里面,实体(域),知识库
答
一下怎么样配置类(与相关的比较扫描)为每个模块和导入这些配置到您的应用程序类?
@SpringBootApplication
@ComponentScan(...)
@Import({RewardsContext.class, DBservicesContext.class})
...
com.company.application'包中是否还有'RewardsApp'?如果没有放在那里或'com.company'包中,并删除'@ ComponentScan'(这已经被@ ComponentScan所隐含)。 –