Tôi đang sử dụng mã như dưới đây:CDI Sự phụ thuộc không rõ ràng với @Sản phẩm - tại sao?
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
}
Khi tôi triển khai một ứng dụng để Glassfish (Java EE 6 btw) tôi nhận được
AmbiguousResolutionException: WELD-001318 Cannot resolve an ambiguous dependency between (...) Car with qualifiers [@Any @Default] (...) Producer Method [Car] with qualifiers [@Any @Default]
Tôi biết rằng khi tôi thêm @Alternative
đến lớp Car nó sẽ hoạt động, nhưng tôi tự hỏi liệu đây có phải là cách thích hợp để làm điều đó không, và tại sao tôi phải làm điều đó?
Bạn có thể cho tôi biết cách sử dụng đúng của @Sản phẩm trong trường hợp này không?
Tôi đang sử dụng Java EE 6, CDI 1.0, EJB 3.1, Glassfish 3.2
Thực tiễn tốt để sử dụng @Alternative là gì? – dmydlarz
@Alternative cho phép bạn đề xuất phiên bản khác nhau cho cùng một loại bean (loại) và kích hoạt nó theo cấu hình trong tệp cấu hình. Nó có thể được sử dụng để có một ben khác trong dev/test và trong sản xuất ví dụ, thay đổi nó chỉ trong tệp beans.xml. –