Я пытаюсь создать один проект, который имеет три подмодуля для API (веб), интерфейса и реализации.
Структура дерева каталогов похожа на
spring-multi-module
--spring-api
--spring-service-server
--spring-service-stub
- Идея состоит в том, что модуль
spring-api
будет просто содержать код, связанный с контроллерами и сетью, а pom.xml
имеет пружинную сеть и spring-service-stub
зависимости.
- Модуль
spring-service-server
будет содержать код, связанный с конфигурацией базы данных и всеми реализациями службы, а pom.xml
будет содержать базу данных и spring-service-stub
зависимости.
- и модуль
spring-service-stub
будет содержать только интерфейсы
и VO, которые используются spring-api
и spring-service-server
.
pom.xml
файл spring-multi-module
<modules>
<module>spring-api</module>
<module>spring-service-server</module>
<module>spring-service-stub</module>
</modules>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
</dependencies>
pom.xml
из spring-api
<parent>
<artifactId>demo</artifactId>
<groupId>com.example</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-api</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>spring-service-stub</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
UserSerivce.java
- это интерфейс в модуле spring-service-stub
, и его реализация выполняется в модуле spring-service-server
. UserController.java
имеет объект с автопроводкой UserService
.
И проблема в том, что когда я пытаюсь запустить класс SpringBootApplication из spring-api
, в журнале появляется следующая ошибка
***************************
APPLICATION FAILED TO START
***************************
Description:
Field userService in com.example.demo.api.controller.UserController required a bean of type 'com.example.demo.service.UserService' that could not be found.
Action:
Consider defining a bean of type 'com.example.demo.service.UserService' in your configuration.
Полный код также добавлен на GitHub, вы можете найти от https://github.com/vinitsolanki/spring-multi-module
Просто, если я добавлю использование @Import({SpringAppStub.class, SpringAppServer.class})
вместо @Import(SpringAppStub.class)
в SpringAppApiConfig
, то это также сработает. Это означает, что я распространяю все сущности и репозиторий на модуль spring-api
, который я не хочу.