Ich versuche, spezifische generische Bean in den generischen Subtyp zu injizieren, aber Spring kann die Abhängigkeit nicht auflösen. Durch das Entfernen des Typs von der Bean funktioniert alles wie erwartet. Hier ein Beispiel:Abhängigkeitsinjektion des Generischen Subtyps mit Spring
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
}
}
Hier wird eine Zielklasse:
@Service
public BaseService{
@Autowire
public AbstractBean<AbstractFrom> baseBean; // <- NoSuchBeanDefinitionException
// @Autowire
// public AbstractBean baseBean; <- Injection works as is expected
}
Hängt von aktivem Profil initialisiert wird nur CompanyBean
oder EmployeeBean
, nie beide. Ich habe auch versucht, den gleichen Namen gegeben Bohnen und uns @Qualifier
Annotation.
Gibt es eine Möglichkeit, wie diese Bohne mit Diamantsyntax injizieren? Kann Spring gegebene Abhängigkeit auflösen? Mit Frühling 4.2.x.
Edit: With Spring 4.3 ist, sollte möglich sein. Siehe Juergen Hoeller's talk
Haben Sie versucht, public AbstractBean baseBean; '? –
SimY4