gpt4 book ai didi

java - CDI 动态 Bean 实例

转载 作者:行者123 更新时间:2023-11-30 10:46:19 27 4
gpt4 key购买 nike

使用 Wildfly/JBoss Weld/CDI 1.1。

假设您有一个数据库。可以是任何东西,MySQL,MongoDB。可以是 REST 服务。从该数据库中,您可以获得动物列表。

[
"Cat",
"Dog",
"Giraffe",
"Tiger",
"Chicken"
]

您不知道您将从这项服务中得到什么动物,但您想要做的是让它们可用于实例注入(inject)。

动物类:

public class Animal {
private final String type;
public String getType() {
return type;
}
public Animal(String aType) {
type = aType;
}
}

注入(inject)点:

@Inject @Any
public Instance<Animal> animals;

您可以创建一个制作动物的生产者方法,例如使用限定符制作某种动物:

@Produces @AnimalType
public Animal makeAnimal(InjectionPoint ip) {
// Get AnimalType qualifier and make a new Animal(typeString),
// ...
return animal;
}

但是你如何生产所有(从数据中已知的)动物,以便你可以用实例迭代它们?

for(Animal animal : animals) {
// ...
}

我确实希望每个 Animal 都能从依赖注入(inject)和其他 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com