CDI,是否可以通过添加限定符 属性 来过滤 @ObservesAsync?
CDI, Is it possible to filter @ObservesAsync by adding a qualifier property?
使用 CDI 2.0 事件和带有 class 和限定符的@observesAsync,可以进一步优化哪些观察者通过某种 运行 时间分配 属性 得到通知?也就是说,是否可以通过使用唯一标识符来指定触发哪个单个观察者,或者是否所有观察者都必须查看事件并决定是否为他们?
实现所需行为的典型方法是使用限定符。
... is it possible to specify which single observer gets triggered by using a unique identifier ...
它是 - 使用不会触发任何其他观察器的唯一限定符。
它的工作方式与所有观察员 "look" 在活动中的方式不同。 CDI 将对此进行过滤,并仅将其传递给与您触发的事件相关的子集。
下面是一个相当详细的例子,说明了事件和观察者如何使用限定符;请注意,这可以通过同步和异步事件来完成。
与注入点一样,事件可以有限定符。假设您有以下事件:
@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
将收到 awesome
和 combined
事件的通知
asyncObserver3
将收到 tricky
和 combined
事件的通知
asyncObserver4
只会收到 combined
事件的通知
最后但同样重要的是,我建议您浏览一下 CDI documentation 以获得更深入的了解。
使用 CDI 2.0 事件和带有 class 和限定符的@observesAsync,可以进一步优化哪些观察者通过某种 运行 时间分配 属性 得到通知?也就是说,是否可以通过使用唯一标识符来指定触发哪个单个观察者,或者是否所有观察者都必须查看事件并决定是否为他们?
实现所需行为的典型方法是使用限定符。
... is it possible to specify which single observer gets triggered by using a unique identifier ...
它是 - 使用不会触发任何其他观察器的唯一限定符。 它的工作方式与所有观察员 "look" 在活动中的方式不同。 CDI 将对此进行过滤,并仅将其传递给与您触发的事件相关的子集。
下面是一个相当详细的例子,说明了事件和观察者如何使用限定符;请注意,这可以通过同步和异步事件来完成。 与注入点一样,事件可以有限定符。假设您有以下事件:
@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
将收到awesome
和combined
事件的通知asyncObserver3
将收到tricky
和combined
事件的通知asyncObserver4
只会收到combined
事件的通知
最后但同样重要的是,我建议您浏览一下 CDI documentation 以获得更深入的了解。