簡體   English   中英

Spring autowire接口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM