[英]Spring autowire interface
我有一個接口IMenuItem
public interface IMenuItem {
String getIconClass();
void setIconClass(String iconClass);
String getLink();
void setLink(String link);
String getText();
void setText(String text);
}
然后我有這個接口的實現
@Component
@Scope("prototype")
public class MenuItem implements IMenuItem {
private String iconClass;
private String link;
private String text;
public MenuItem(String iconClass, String link, String text) {
this.iconClass = iconClass;
this.link = link;
this.text = text;
}
//setters and getters
}
有沒有辦法只使用IMenuItem接口從配置類創建多個MenuItem實例? 用@autowired還是什么? 也可以通過指定構造函數的參數來自動裝配?
@Autowired
實際上非常適合這種情況。 您可以自動裝配特定類(實現)或使用接口。
考慮這個例子:
public interface Item {
}
@Component("itemA")
public class ItemImplA implements Item {
}
@Component("itemB")
public class ItemImplB implements Item {
}
現在,您可以根據@Component
注釋值選擇對象的名稱,從而選擇使用這些實現中的哪一個
像這樣:
@Autowired
private Item itemA; // ItemA
@Autowired
private Item itemB // ItemB
要多次創建同一實例,可以使用@Qualifier批注指定將使用的實現:
@Autowired
@Qualifier("itemA")
private Item item1;
如果您需要使用某些特定的構造函數參數實例化項目,則必須將其指定為XML配置文件。 關於使用qulifiers和autowiring的好教程可以在這里找到。
我相信有一半的工作是由你的@scope
注釋完成的,如果你的項目中沒有任何其他ImenuItem接口的實現將創建多個實例
@Autowired
private IMenuItem menuItem
但如果有多個實現,則需要使用@Qualifer
注釋。
@Autowired
@Qualifer("MenuItem")
private IMenuItem menuItem
這也將創建多個實例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.