2015-06-30 16 views
6

Sadece kullanarak, bir yapılandırma sınıfından Menuıtem birden çok örneğini oluşturmak için herhangi bir yolu var mı bu arayüzdeBahar autowire arayüzü

@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 

} 

için bir uygulama var Sonra bir Arayüz IMenuItem

public interface IMenuItem { 

    String getIconClass(); 
    void setIconClass(String iconClass); 

    String getLink(); 
    void setLink(String link); 

    String getText(); 
    void setText(String text); 

} 

var IMenuItem arayüzü? @otowired veya başka bir şey ile? Ayrıca kurucunun argümanlarını belirterek oto-tel sağlamak mümkün mü? Bu senaryo için gerçekten mükemmel olan

cevap

16

@Autowired aslında mükemmeldir. Belirli bir sınıfa otomatik olarak geçebilir (uygulama) veya bir arayüz kullanabilirsiniz.

public interface Item { 
} 

@Component("itemA") 
public class ItemImplA implements Item { 
} 

@Component("itemB") 
public class ItemImplB implements Item { 
} 

Şimdi seçebilirsiniz bu uygulamalardan biri @Component açıklama değerine Bunun gibi

göre nesne için bir ad seçerek basitçe kullanılacaktır::

bu örneği düşünün

@Autowired 
private Item itemA; // ItemA 

@Autowired 
private Item itemB // ItemB 

Aynı örneği birden çok kez oluşturmak için, hangi uygulamanın uygulanacağını belirtmek üzere @Qualifier ek açıklamasını kullanabilirsiniz. kullandı: Eğer bazı özel yapıcı parametreleri ile öğeleri örneğini gerekir

@Autowired 
@Qualifier("itemA") 
private Item item1; 

durumda, bunu bir XML yapılandırma dosyası belirtmek gerekir. Qulifiers ve autowiring kullanımı hakkında güzel bir eğitim HERE bulunabilir.

+0

Ben sadece bir uygulama (Menuıtem) sahip yaratacaktır. Örnek olarak 3 MenuItems oluşturmak istiyorum, ancak sadece arayüz üzerinden. –

+0

Düzenlenmiş cevabı görün, umarım yardımcı olur. – Smajl

1

i aşağıda birden çok örneği

@Autowired 
private IMenuItem menuItem 

ama yaratacak projenizde ImenuItem arabiriminin herhangi bir diğer uygulama yoksa işin yarısı senin @scope açıklama yapılır inanıyoruz birden çok uygulamaları varsa, sen @Qualifer ek açıklamasını kullanmanız gerekir.

@Autowired 
@Qualifer("MenuItem") 
private IMenuItem menuItem 

bu da birden çok örneği

+0

numaralı niteleyici ek açıklamasına ihtiyacınız olacak, ancak verilen parametrelerle çoklu menuItem'in bir yolu var mı? Ben, varsayılan boş yapıcı değil, MenuItem öğesinde yapıcıyı kullanmak için @ autowired. –

+0

@Outo kablolu ile kurucuya açıklama eklemeniz gerekir. ama ilkel veri türü ile çalışmadı, String iconClass, String link, String text ile başka bir Pojo oluşturmalı ve Pojo'yi fasulye – Bhupi

+0

olarak enjekte etmeniz gerekir. IMenuItem arabirimi için tek bir uygulama olduğunda neden birden çok örnek oluşturacaktır? – Lucky