Spring 自动装配接口
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 接口从配置 class 创建 MenuItem 的多个实例?用@autowired 什么的?也可以通过指定构造函数的参数来自动装配吗?
@Autowired
实际上非常适合这种情况。您可以自动装配特定的 class(实现)或使用接口。
考虑这个例子:
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 配置文件。可以找到关于使用限定符和自动装配的不错的教程 HERE。
我相信一半的工作是由你的 @scope
注释完成的,如果你的项目中没有任何其他 ImenuItem 接口的实现,下面将创建多个实例
@Autowired
private IMenuItem menuItem
但是如果有多个实现,则需要使用@Qualifer
注解。
@Autowired
@Qualifer("MenuItem")
private IMenuItem menuItem
这也会创建多个实例
我有一个界面 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 接口从配置 class 创建 MenuItem 的多个实例?用@autowired 什么的?也可以通过指定构造函数的参数来自动装配吗?
@Autowired
实际上非常适合这种情况。您可以自动装配特定的 class(实现)或使用接口。
考虑这个例子:
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 配置文件。可以找到关于使用限定符和自动装配的不错的教程 HERE。
我相信一半的工作是由你的 @scope
注释完成的,如果你的项目中没有任何其他 ImenuItem 接口的实现,下面将创建多个实例
@Autowired
private IMenuItem menuItem
但是如果有多个实现,则需要使用@Qualifer
注解。
@Autowired
@Qualifer("MenuItem")
private IMenuItem menuItem
这也会创建多个实例