我有一个接口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实际上适合这种情况。你可以自动连接特定的类(实现)或使用接口。
@Autowired
考虑以下示例:
public interface Item { } @Component("itemA") public class ItemImplA implements Item { } @Component("itemB") public class ItemImplB implements Item { }
现在,你可以根据@Component注释值选择对象的名称,从而选择使用其中一种实现方式
@Component
像这样:
@Autowired private Item itemA; // ItemA @Autowired private Item itemB // ItemB
要多次创建同一实例,可以使用@Qualifier批注指定将使用的实现:
@Autowired @Qualifier("itemA") private Item item1;
如果需要使用一些特定的构造函数参数实例化这些项目,则必须为其指定XML配置文件。在这里可以找到有关使用qulifiers和自动装配的不错的教程。