【发布时间】:2021-03-10 08:52:43
【问题描述】:
我正在努力解决一个问题,但我不知道如何解决它。
这是我使用 Maven 的项目结构:
我的项目:
- moduleA
- moduleB
- moduleC
我在moduleB中写了两个接口,一个在moduleB中实现,另一个在moduleC中实现。
问候界面:
public interface Greeting {
WelcomeMessage greet();
}
它的实现写在moduleB上:
@Component
public class HelloWorld implements Greeting {
private final Messages messages;
public HelloWorld(Messages messages) {
this.messages = messages;
}
@Override
public WelcomeMessage greet() {
return messages.getWelcomeMessage();
}
}
消息界面:
public interface Messages {
WelcomeMessage getWelcomeMessage();
}
它的实现写在moduleC上:
@Component
public class MessagesImpl implements Messages {
private final Mapper mapper;
private final MessageRepository messageRepository;
public MessagesImpl(Mapper mapper, MessageRepository messageRepository) {
this.mapper = mapper;
this.messageRepository = messageRepository;
}
@Override
public WelcomeMessage getWelcomeMessage() {
// do something with repository and mapper
}
}
我的问题是 Spring 似乎没有使用 moduleC 中 Messages 的实现,当我启动应用程序时会显示此错误:
**required a bean of type 'fr.mypackage.core.spi.Messages' that could not be found**
此外,IntelliJ 一直告诉我 MessagesImpl 从未使用过。
【问题讨论】:
-
您是否使用
@ComponentScan告诉spring 去查找@Component注释类?在运行您的应用程序时,您确定将“模块 C”作为运行时(至少)依赖项吗? -
您是否也包括配置? @Import({ ModuleConfigurationFile.class })
-
我刚刚在我的应用程序文件中使用了scanBasePackages @SpringBootApplication(scanBasePackages = "fr.mypackage")
标签: java spring spring-boot maven