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構成ファイルを指定する必要があります。修飾子と自動配線の使用に関する素晴らしいチュートリアルが見つかります [〜#〜]ここ[〜#〜] 。
私の仕事の半分は@scope
アノテーションによって行われると思います。以下のプロジェクトにImenuItemインターフェイスの他の実装がない場合、複数のインスタンスが作成されます
@Autowired
private IMenuItem menuItem
ただし、複数の実装がある場合は、@Qualifer
アノテーションを使用する必要があります。
@Autowired
@Qualifer("MenuItem")
private IMenuItem menuItem
これにより、複数のインスタンスも作成されます