Spring引导自动装配bean在maven多模块项目

时间:2017-10-13 14:37:32

标签: java spring maven spring-boot

虽然使用spring boot和maven将我们的项目模块化为不同的独立maven项目,但我们遇到了一个问题,即多模块maven项目中bean的自动装配不起作用。

为了概述这个问题,下面是迄今为止开发的独立maven项目

  1. Coreservices - 包含整个应用程序的spring boot域对象:Output JAR
  2. DBservices1 - 包含访问数据库的Spring引导存储库和服务(数据库服务):输出JAR
  3. 奖励 - 包含奖励模块相关文件(控制器,服务(业务逻辑服务),视图):输出JAR
  4. RewardsApp-独立可部署的maven项目:输出WAR
  5. 以下是依赖结构 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();
    }
    

2 个答案:

答案 0 :(得分:2)

如何为每个模块配置一个配置类(带有相关的comp扫描)并将这些配置导入到您的应用程序类中?

@SpringBootApplication
@ComponentScan(...)
@Import({RewardsContext.class, DBservicesContext.class})
...

Import docs here

答案 1 :(得分:1)

通过在RewardsApp.java中添加以下注释为我做了诀窍,现在自动装配正在为罐子里面的类工作

@ComponentScan(basePackages = {"com.company"})
@EntityScan(basePackages = {"com.company"})
@EnableJpaRepositories(basePackages = {"com.company"})

我猜以上是针对服务,实体(域名),存储库