Sto usando il codice come di seguito:CDI Dipendenza ambigua con @Produces - perché?
public Configuration {
private boolean isBatmanCar = someMethod(...);
@Produces
public Car getCar(@New Car car) {
if(isBatmanCar) {
car.setName("BatmanCar");
}
return car;
}
}
public Car {
private String name = "NormalCar";
public void setName(String name) {
this.name = name;
}
}
public Demo {
@Inject
Car car;
// rest of code
}
Quando schiero un'applicazione per Glassfish (Java EE 6 btw) ottengo
AmbiguousResolutionException: WELD-001318 Cannot resolve an ambiguous dependency between (...) Car with qualifiers [@Any @Default] (...) Producer Method [Car] with qualifiers [@Any @Default]
So che quando aggiungo @Alternative
alla classe Car funzionerà, ma mi chiedo se questo è il modo corretto per farlo, e perché devo farlo?
Puoi dirmi qual è l'uso corretto di @Produces in tal caso?
sto usando Java EE 6, CDI 1.0, EJB 3.1, 3.2 Glassfish
Qual è la buona pratica per l'utilizzo di @Alternative? – dmydlarz
@Alternative consente di proporre versioni diverse per lo stesso bean (tipo) e attivarle tramite la configurazione in un file di configurazione. Può essere utile avere un ben diverso in dev/test e in produzione, ad esempio, cambiandolo solo nel file beans.xml. –