【发布时间】:2021-12-05 20:57:42
【问题描述】:
目前,我的 CDI bean 注入一次就能完成所有工作,但我需要大约 6 到 10 个单独的实例(?),具体取决于我的输入。 (理想情况下,我希望能够根据需要注入动态数量的相同 CDI bean。)
不幸的是,我需要注入 bean,因为该类依赖于另一个 CDI bean。 (见下文2.CDI bean类)
- 客户端类
@ApplicationScoped
public class Clients {
Publisher pub;
Subscriber sub;
@Inject
ListenerBean listener;
public void init(){
pub = new Publisher();
sub = new Subscriber(listener);
}
}
- CDI bean 类
@Dependent
public class ListenerBean{
@Inject
private eventHandler h;
public void onMessage(Msg msg){
h.doesSomething();
}
}
我正在寻找的功能,但不确定那里有什么可用的。我还没有找到任何人想要完成同样的事情。
for(Subscriber s: listOfSubscribers){
@Inject
ListenerBean l;
s = new Subscriber(l);
}
// The only thing I can do right now is
@Inject
ListenerBean listener1;
@Inject
ListenerBean listener2;
@Inject
ListenerBean listener3;
@Inject
ListenerBean listener4;
编辑:听众确实需要是可识别的。 (在注入后调用 setter。)可能不是最佳实践,但不确定如何实现这一点-
- 监听器将监听不同的主题(由各自的消费者声明)
- 每个听众都必须根据主题处理他们的消息
@Inject
ListenerBean listener1;
listener1.setTopic("TopicA");
【问题讨论】:
-
不能注入
List<ListenerBean>吗? -
我相信,如果
ListenerBean是@Dependent并且您注入Instance<ListenerBean> listenerInstance,那么每次您执行listenerInstance.get()时都会得到一个新副本。确保在处理完这些实例后将其处理掉。 -
这听起来像是一个使用标准
Event和@Observes代替的经典示例。 -
@chrylis-cautiouslyoptimistic- 这不是一回事...见post 4009388
-
@NikosParaskevopoulos 谢谢!我会试试这个
标签: java cdi javabeans java-ee-8