2011-11-25 21 views
7

@Component ek açıklaması ile <bean parent="someParent">'u kullanmak için herhangi bir yol var mı?@Component ebeveynle birlikte mi?

@Component ek açıklaması kullanılarak "yay üstbilgisi" olan bir tane oluşturmak istiyorum.

Bu mümkün mü? XML benim yorumum ardından

+4

sadece devralma kullanamaz mıyız? Baz sınıfında otomatik kablolama aynı şekilde çalışacaktır. –

+1

@Tomasz Nurkiewicz xml olarak tanımlanmış bir üst ana fasulyem var (bazı özelliklerin "varsayılan" değerlerine ayarlanmış). Bu değiştirebileceğim bir şey değil. – IAdapter

+0

Fikrimi daha fazla açıklamak için bir cevap ekledim. İhtiyaçlarınıza uymaması için biraz daha fazla detay verebilir misiniz? XML'de ebeveyn tanımını neden değiştiremezsiniz? Korkarım ki ebeveynin ek açıklamalara başvurması mümkün değildir ... –

cevap

3

, bu parça

<bean id="base" abstract="true"> 
    <property name="foo" ref="bar"/> 
</bean> 

<bean class="Wallace" parent="base"/> 
<bean class="Gromit" parent="base"/> 

az ya da çok eqivalent (ilkbaharda soyut fasulye bir class gerekmez çünkü yapay Base sınıf oluşturulmuş unutmayın) bu kodu şudur:

public abstract class Base { 
    @Autowired 
    protected Foo foo; 
} 

@Component 
public class Wallace extends Base {} 

@Component 
public class Gromit extends Base {} 

Wallace ve Gromit artık ortak Foo özelliğine erişim hakkına sahiptir. Ayrıca bunu geçersiz kılabilirsiniz, ör. @PostConstruct.

BTW XML'de parent özniteliğini sevdim, bu da fasulye KURUYU tutmasına izin verdi, ancak Java yaklaşımı daha temiz görünüyor. Bu Yapabilirdim budur

- (Bileşen-tarama enjekte edildi, bir potansiyel Uygulanması İçin context.xml-bildirimiyle Fasulye kullanılan genel bir özet ebeveyn Sınıfı)

+3

Eğer 'base' bean, yapay 'Bean' sınıfı ve' Wallace 've' Gromit'le birlikte ya da oluşturmadan XML'de tanımlanacaksa, sizin örneğiniz çalışmaz. Bileşen taraması ile oluşturulacak. –

0

Aynen Construct .. rastladı @Component Sınıfı yapılan: Ben (bu enjeksiyon değil sınıflara nesne üzerinde çalıştığını açıkça beri iyi) yapıyor sona erdi ..what

@Autowired 
public void setBeanUsedInParent(BeanUsedInParent bean) { 
    super.setBeanUsedInParent(bean); 
} 

- ve değiştirmek mümkün olup olmadığını ana Sınıf:

// abstract getter in parent Class 
public abstract BeanUsedInParent getBeanUsedInParent(); 
fiili Fasulye ..leave

yanı sıra fiilen uygulanması (@Component Sınıf) kadar onların enjeksiyon:

@Autowired 
private BeanUsedInParent beanUsedInParent; 

@Override 
public BeanUsedInParent getBeanUsedInParent() { 
    return this.beanUsedInParent; 
} 
İlgili konular