使用Wildfly / JBoss Weld / CDI 1.1。
假设您有一个数据库。可以是任何东西,MySQL,MongoDB。可能是REST服务。从该数据库中,您可以获得动物列表。
[
"Cat",
"Dog",
"Giraffe",
"Tiger",
"Chicken"
]
您不知道将从此服务中获得哪些动物,但是您想要做的是使它们可用于实例注入。
动物类:
public class Animal {
private final String type;
public String getType() {
return type;
}
public Animal(String aType) {
type = aType;
}
}
注射点:
@Inject @Any
public Instance<Animal> animals;
您可以创建一个制作动物的Producer方法,例如使用限定符来制作某种动物:
@Produces @AnimalType
public Animal makeAnimal(InjectionPoint ip) {
// Get AnimalType qualifier and make a new Animal(typeString),
// ...
return animal;
}
但是,如何生产所有(从数据中得知)动物,以便您可以通过实例对它们进行迭代?
for(Animal animal : animals) {
// ...
}
我确实希望每个动物都能从依赖注入和其他Weld / CDI好东西中受益。
最佳答案
看来您可能正在寻找Unmanaged
Unmanaged<Animal> unmanagedAnimal = new Unmanaged<>(Animal.class);
UnmanagedInstance<Animal> animalInstance = unmanagedAnimal.newInstance();
Animal animal = animalInstance.produce().inject().postConstruct().get();
它基本上是一个依赖范围的bean,但是完成后需要手动销毁它。
关于java - CDI动态Bean实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36610488/