adi*_*eag 9 java spring interface autowired
我有一个接口IMenuItem
public interface IMenuItem {
String getIconClass();
void setIconClass(String iconClass);
String getLink();
void setLink(String link);
String getText();
void setText(String text);
}
Run Code Online (Sandbox Code Playgroud)
然后我有这个接口的实现
@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
}
Run Code Online (Sandbox Code Playgroud)
有没有办法只使用IMenuItem接口从配置类创建多个MenuItem实例?用@autowired还是什么?也可以通过指定构造函数的参数来自动装配?
Sma*_*ajl 24
@Autowired实际上对于这种情况来说是完美 您可以自动装配特定类(实现)或使用接口.
考虑这个例子:
public interface Item {
}
@Component("itemA")
public class ItemImplA implements Item {
}
@Component("itemB")
public class ItemImplB implements Item {
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以根据@Component注释值选择对象的名称,从而选择使用这些实现中的哪一个
像这样:
@Autowired
private Item itemA; // ItemA
@Autowired
private Item itemB // ItemB
Run Code Online (Sandbox Code Playgroud)
要多次创建同一实例,可以使用@Qualifier批注指定将使用的实现:
@Autowired
@Qualifier("itemA")
private Item item1;
Run Code Online (Sandbox Code Playgroud)
如果您需要使用某些特定的构造函数参数实例化项目,则必须将其指定为XML配置文件.关于使用qulifiers和autowiring的好教程可以在这里找到.