È possibile utilizzare CDI per inserire parametri nelle chiamate di metodo? Il comportamento previsto sarebbe simile all'iniezione sul campo. Il produttore preferito viene consultato e il prodotto viene utilizzato.Come utilizzare CDI per l'iniezione dei parametri del metodo?
Quello che vorrei fare è questo:
public void foo(@Inject Bar bar){
//do stuff
}
o del presente (con sytax meno confusione):
public void foo(){
@Inject
Bar bar;
//do stuff
}
Questa sintassi è illegale in entrambi i casi. C'è un'alternativa? Se no, sarebbe una cattiva idea per qualche motivo se fosse possibile?
Grazie
EDIT - io ho fatto le mie esigenze non abbastanza chiari - mi piacerebbe essere in grado di chiamare il metodo direttamente, lasciando l'inizializzazione della bar
variabile al contenitore. La risposta di Jörn Horstmann e Perception suggerisce che non è possibile.
Grazie, Percezione. La prima frase è stata sufficiente a rovinare il mio sogno :) "quando viene istanziato". Quello che avevo in mente dovrebbe funzionare come un metodo produttore senza esserlo. Immagino che il mio caso d'uso non fosse inteso dal gruppo di esperti. – kostja
Sì, sfortunatamente le specifiche non impongono che le chiamate ai metodi facciano parte della gestione del ciclo di vita dei bean. Quindi, chiamare direttamente il metodo * non * invocherà l'iniezione (è simile a chiamare 'new' direttamente sull'oggetto). Non sarei sorpreso se l'iniezione di metodo lo rendesse nella prossima versione della specifica. – Perception