Spring autowire接口

我有一个接口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还是什么? 也可以通过指定构造函数的参数来自动assembly?

@Autowired实际上非常适合这种情况。 您可以自动assembly特定类(实现)或使用接口。

考虑这个例子:

 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 

这也将创建多个实例