Supponiamo di avere una classe Car. Nel mio codice voglio creare 10 macchine. La classe Car ha alcune dipendenze annotate da @Inject. Quale sarebbe l'approccio migliore per farlo?Come creare istanze al volo in CDI
CDI ha un'interfaccia Provider che posso usare per creare le auto:
@Inject Provider<Car> carProvider;
public void businessMethod(){
Car car = carProvider.get();
}
Purtroppo questo non funziona se non ho un CarFactory che ha un metodo con @Produces annotazione che crea il auto. Per quanto rifletta il mondo reale che non posso creare auto senza una fabbrica, preferisco non scrivere fabbriche per tutto. Voglio solo che il contenitore CDI crei la mia macchina come qualsiasi altro bean. Come mi consigliate che creo quelle macchine?
Questo è in realtà ciò che ho finito per usare.Puoi correggere il tuo esempio, l'argomento costruttore non è lo stesso tipo dell'attributo class: Car vs UIModule. Inoltre penso che l'iniezione dovrebbe essere annotetade con @New invece di @Any. E un esempio migliore per l'uso() - il metodo sarebbe uno che mostrerebbe come si otterrebbe un'istanza della macchina. Ad esempio 'carInstances.get()' – palto
@New è deprecato in CDI 1.1, preferendo i bean @Dependent. Vedi CDI 1.1, sezione 3.14. Non capisco davvero cosa c'è di sbagliato nell'usare un fornitore, io. e., 'CDI.current(). select (Car.class) .get()'? –
@MartinAndersson Il problema originale era che dovevo creare una fabbrica per l'utilizzo di un provider. L'esempio che hai fornito nel commento è completamente nuovo per me. Forse potresti creare una risposta da questo? – palto