gpt4 book ai didi

java - 在 CDI(焊接)中注入(inject)对象列表

转载 作者:IT老高 更新时间:2023-10-28 20:51:27 27 4
gpt4 key购买 nike

假设我有一个名为 SocialNetworkService 的接口(interface), 和三个实现 - TwitterService , FacebookServiceFriendFeedService .

现在我希望,每当我的托管 bean(或任何 Web 组件)收到消息时,在所有社交网络中共享它。我试过了:

@Inject private List<SocialNetworkService> socialNetworkServices;

但它不起作用(部署错误)。 (也尝试了 @Any 限定符 - 结果相同)

那么,有没有办法注入(inject)一个接口(interface)的所有(或部分)实现的列表?

我知道给定注入(inject)点不应有多个可能的 bean 的规则。我想我可以通过创建一个生成列表的生产者并使用 Instance<SocialNetworkService> 来实现。 ,但这对于这项任务来说似乎太多了。

最佳答案

将我的尝试与 Weld 论坛的回答结合起来:

@Inject @Any
private Instance<SocialNetworkService> services;

Instance 实现了 Iterable,因此可以简单地使用 for-each 循环。 @Any 限定符是必需的。


另一种方法是使用事件系统:

  • 创建一个MessageEvent(包含有关消息的所有信息)
  • 不是注入(inject)社交网络列表,而是简单地注入(inject)事件:

    @Inject private Event<MessageEvent> msgEvent;

    并触发它:msgEvent.fire(new MessageEvent(message));

  • 观察所有服务中的事件(不管它们的接口(interface)如何,这可能是一个优点):

    public void consumeMessageEvent(@Observes MessageEvent msgEvent) {..}

关于java - 在 CDI(焊接)中注入(inject)对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4009388/

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