Sto cercando di iniettare un bean generico specifico per il sottotipo Generico, ma Spring non è in grado di risolvere la dipendenza. Rimuovendo il tipo dal bean, tutto funziona come previsto. Ecco un esempio:Iniezione di dipendenza del sottotipo generico con 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
}
}
Qui è una classe di destinazione:
@Service
public BaseService{
@Autowire
public AbstractBean<AbstractFrom> baseBean; // <- NoSuchBeanDefinitionException
// @Autowire
// public AbstractBean baseBean; <- Injection works as is expected
}
dipende profilo attivo viene inizializzato solo CompanyBean
o EmployeeBean
, mai entrambi. Ho anche provato a impostare lo stesso nome con i bean e noi con l'annotazione @Qualifier
.
Esiste un modo per iniettare questo bean usando la sintassi del diamante? Spring è in grado di risolvere una determinata dipendenza? Utilizzando Spring 4.2.x.
Edit: Con Primavera 4.3 viene dovrebbe essere possibile. Vedere Juergen Hoeller's talk
Hai provato a riprodurre automaticamente 'abstractBean pubblico estende AbstractFrom> baseBean; '? – SimY4