Spring boot,基于maven的多个模块项目中的依赖注入失败

时间:2015-09-11 11:19:41

标签: java spring maven

嗨朋友我正在开发一个基于maven的spring boot项目项目,这个项目是多个模块,一个模块是 Main 模块,第二个模块是 Service 模块。我在主模块中有一个控制器,在Serivce模块中有一个服务

控制器

package com.aquevix.controller;

import com.aquevix.common.MyService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.inject.Inject;

/**
 * Created by mohdqasim on 11/9/15.
 */
@RestController
@RequestMapping("/api")
public class MyController {

    @Inject MyService myService;
    @Inject BookRepository bookRepository;
    @RequestMapping(value = "/data" , method = RequestMethod.GET)
    public String getData(){
     return myService.getData();
    }
}

服务

package com.aquevix.common;

import org.springframework.stereotype.Service;

/**
 * Created by mohdqasim on 11/9/15.
 */
@Service
public class MyService {
    public String getData(){
        return "hello qasim";
    }
}

在maven多个模块中,这个scenerio工作正常但我在服务模块中也有一个接口形式的存储库。

package com.aquevix.common;

import org.springframework.data.jpa.repository.*;

/**
 * Spring Data JPA repository for the Book entity.
 */
public interface BookRepository extends JpaRepository<Book,Long> {

}

因此,当我从 Main 模块执行主类时,我的项目在服务模块中没有bookrepository(或存在于Main模块中)工作正常但是如果我将bookrepository放在 Service 模块然后MyController无法实例化MyController中bookRepository的应用依赖注入失败。 任何人都可以帮助我如何避免这种失败我将任何界面放入服务模块中,该模块正被注入主要模块

2 个答案:

答案 0 :(得分:1)

您需要JavaConfig您的存储库位置,如下所示:

@Configuration
@EnableJpaRepositories("com.aquevix.common")
class ApplicationConfiguration {

  @Bean
  public EntityManagerFactory entityManagerFactory() {
    // …
  }
}

Working with Spring Data Repositories

的更多参考资料

答案 1 :(得分:0)

我遇到了类似的问题,并通过以下信息解决了该问题:Spring Boot: autowire beans from library project

简而言之,将此注释添加到您的应用程序中:

@Import(SharedConfigurationReference.class)

然后在您的Service项目中创建SharedConfigurationReference

package com.aquevix.common;

import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@Configuration
@ComponentScan("com.aquevix")
@EnableJpaRepositories("com.aquevix")
@EntityScan("com.aquevix")
public class SharedConfigurationReference {}

对于实体和组件扫描注释,请确保指定一个对所有项目都是父级的程序包,即控制器和服务的父级程序