【发布时间】:2020-04-14 16:38:22
【问题描述】:
我正在尝试使用 Spring 实现基于构造函数的依赖注入。 从 Spring 4.3 开始,构造函数注入不需要注解,所以我的类看起来像这样:
@RestController
public class CardController {
private IDeckManager _deckManager;
public CardController(IDeckManager deckManager){
_deckManager = deckManager;
}
@RequestMapping("/preparedeck")
public void PrepareDeck(){
_deckManager.InitializeDeck();
_deckManager.ShuffleDeck();
}
}
IDeckManager 在哪里:
public interface IDeckManager {
void InitializeDeck();
void ShuffleDeck();
}
而IDeckManager的实际实现是:
public class DeckManager implements IDeckManager {
public Stack<Card> deck;
public DeckManager() {
deck = new Stack<Card>();
}
@Override
public void InitializeDeck() {
for (int i = 0; i < ICard.Suit.length; i++) {
for (int j = 0; i < ICard.Values.length; i++) {
deck.add(new Card(ICard.Suit[i], ICard.Values[j]));
}
}
}
@Override
public void ShuffleDeck() {
Collections.shuffle(deck);
}
}
不幸的是,在运行时它说:CardController 中构造函数的参数 0 需要一个 IDeckManager 类型的 bean,但无法找到。
为了让 DI 正常工作,我缺少什么?
【问题讨论】:
-
Spring 如何知道
IDeckManager是 Spring 托管的 bean? -
您是否尝试将@Component 添加到 DeckManager 中? docs.spring.io/spring-framework/docs/current/javadoc-api/org/…
标签: java spring spring-boot dependency-injection spring-annotations