Bahar

2016-03-14 22 views
5

ile Genel alt türün Bağımlılık enjeksiyonu Belirli Genel fasulye, genel alt türüne enjekte etmeye çalışıyorum, ancak Bahar bağımlılığı gideremiyor. Fasulyeden gelen türü kaldırarak, her şey beklendiği gibi çalışır. İşteBahar

public class AbstractFrom{ 
    // ... 
} 

public class EmployyForm extends AbstractFrom{ 
    // ... 
} 

public class CompanyForm extends AbstractFrom{ 
    // ... 
} 

abstract class AbstractBean<T extends AbstractFrom>{ 

    public abstract void calculate(T form); 
} 

@Component 
public CompanyBean extends AbstractBean<CompanyForm>{ 

    public void calculate(CompanyForm form){ 
     // specific impl 
    } 
} 

@Component 
public EmployeeBean extends AbstractBean<EmployyForm>{ 

    public void calculate(EmployyForm form){ 
     // specific impl 
    } 
} 

bir hedef sınıfı edilir: İşte bir örnek aktif profilin

@Service 
    public BaseService{ 

     @Autowire 
     public AbstractBean<AbstractFrom> baseBean; // <- NoSuchBeanDefinitionException 

     // @Autowire 
     // public AbstractBean baseBean; <- Injection works as is expected 
    } 

Bağlıdır sadece CompanyBean veya EmployeeBean, asla ikisi başlatılır. Ben de fasulye ve bize @Qualifier ek açıklama verilen aynı isim denedim.

Bu sözdiziminin elmas sözdizimini kullanarak nasıl enjekte edildiği var mı? Bahar verilen bağımlılığı çözebilir mi? İlkbahar 4.2.x kullanma


Düzenleme: Bahar 4.3 ile mümkün olmalıdır edilmektedir. Ben muhtemelen bu hoşuna gitmeyecek biliyorum Juergen Hoeller's talk

+0

"Ortak AbstractBean baseBean; '? – SimY4

cevap

0

Bkz ama neden EmployeeForm ve 2 ayrı baz formlarına CompanyForm ayırmak değil, sonra BaseService içinde autowire için, İKİ entires olun. Bu bir Bahar cevabı değildir, ancak işe yarayıp yaramadığını görmek için hızlı bir çalışma yaptığım şey buydu. Bunları ayırmak, korkunç bir tasarım uzlaşması değildir.

+0

Bu sorunu çözdü, ama bu benim durumumda bir çözüm değil çünkü çok fazla kodu çoğaltmak zorunda kalacağım. Sürdürülebilirlik termosunda daha kötü bir çözümdür. Yine de teşekkürler. –