gpt4 book ai didi

jakarta-ee - CDI,是否可以通过添加限定符属性来过滤@ObservesAsync?

转载 作者:行者123 更新时间:2023-12-01 13:42:32 27 4
gpt4 key购买 nike

使用 CDI 2.0 事件和带有类和限定符的@observesAsync,可以进一步优化哪些观察者通过某种运行时分配的属性得到通知?也就是说,是否可以通过使用唯一标识符来指定触发哪个单个观察者,还是所有观察者都必须查看事件并决定是否为他们触发?

最佳答案

实现所需行为的典型方法是使用限定符

... is it possible to specify which single observer gets triggered by using a unique identifier ...

它是 - 使用不会触发任何其他观察者的唯一限定符。它不会以所有观察者“看”事件的方式运作。 CDI 将对此进行过滤,并仅将其传递给与您触发的事件相关的子集。

下面是一个相当详细的例子,说明事件和观察者如何使用限定符;请注意,这可以通过同步和异步事件来完成。与注入(inject)点一样,事件可以有限定符。假设您有以下事件:

@Inject Event<MyPayload> basic;
@Inject @Awesome Event<MyPayload> awesome;
@Inject @Tricky Event<MyPayload> tricky;
@Inject @Awesome @Tricky Event<MyPayload> combined;

为了简单起见,让我们坚持通过 <eventName>.fireAsync(new MyPayload()) 触发这些事件.现在对于观察员 - 那些也可以有限定词。限定符集决定了他们将被通知哪些事件。所以这里有一群观察者:

public void asyncObserver1(@ObservesAsync MyPayload event)
public void asyncObserver2(@ObservesAsync @Awesome MyPayload event)
public void asyncObserver3(@ObservesAsync @Tricky MyPayload event)
public void asyncObserver4(@ObservesAsync @Awesome @Tricky MyPayload event)

现在哪个观察者将被通知哪个事件。一般规则是 - 如果观察者限定符集是已触发事件限定符的子集或空集,则通知观察者方法

假设您触发了上述事件:

  • asyncObserver1将收到所有事件的通知,因为它的一组限定符是空的
  • asyncObserver2将被通知 awesomecombined事件
  • asyncObserver3将被通知 trickycombined事件
  • asyncObserver4只会收到 combined 的通知事件

最后但同样重要的是,我建议您看一下 CDI documentation以获得更深入的了解。

关于jakarta-ee - CDI,是否可以通过添加限定符属性来过滤@ObservesAsync?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38777555/

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