当前位置: 首页 > 知识库问答 >
问题:

CDI 1.x异步事件

连昊天
2023-03-14
public <X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> event, final BeanManager beanManager) {
    final AnnotatedType<X> type = event.getAnnotatedType();
    for (AnnotatedMethod<?> method : type.getMethods()) {
        for (final AnnotatedParameter<?> param : method.getParameters()) {
            if (param.isAnnotationPresent(Observes.class) && param.isAnnotationPresent(Async.class)) {
                asyncObservers.add(ObserverMethodHolder.create(this.pool, beanManager, type, method, param));
            }
        }
    }
}

public void afterBeanDiscovery(@Observes AfterBeanDiscovery event) {
    for (ObserverMethod<?> om : this.asyncObservers) {
        event.addObserverMethod(om);
    }
}

然后,在发现步骤之后,它注册@Observes@Async方法。
查看由JBoss Weld2提供的AddobServerMethod()方法,我看到:

additionalObservers.add(observerMethod);

那么我的问题是,这些方法不会被调用两次吗?我的意思是,它们可能被注册两次,首先通过容器本身,然后通过调用AddObServerMethod()方法。

共有1个答案

许鸿志
2023-03-14

我不熟悉项目,但从第一看,它似乎很过时,没有维护。

至于扩展--它基本上再次添加了“相同”的观察者方法(OM),并使用了自己的OM实现。因此,我想说行为取决于CDI实现,因为规范不能保证当您再次注册“相同的”OM时会发生什么--它是被替换还是像您所说的那样被添加?

我所说的“相同”是指完全相同的底层Java方法,尽管它被包裹在一个更华丽的外衣里。

 类似资料:
  • 给出一些关于我正在尝试做的细节:我正在用Java制作一个Minecraft插件。我有一个对象,它使用HashMap绑定到Minecraft的Player对象。 我在这个对象中有一个方法,类似于: 显然,会有很多事情发生,所以我希望这是异步发生的。计时器将在后台继续,它不会阻止代码中的任何其他内容。 对不起,如果我的问题太简单了,但我真的检查了网络和我是新的Java,所以原谅我的无知。

  • 我有一个UserControl上的事件,我正在听: 具有以下签名: 在以下情况下,如何调用此异步方法: 不阻塞GUI线程 在调用我的异步方法后能够调用 能够在正确的(GUI)线程中调用。 我所尝试的: -- -- --

  • 接收信号 import signal import os import time def receive_signal(signum, stack): print('Received:', signum) # Register signal handlers signal.signal(signal.SIGUSR1, receive_signal) signal.signal(si

  • 问题内容: 我有以下代码: 但是,当我执行此代码时,在图形 之前 会收到响应“ hello” 。为什么会这样呢?我将如何改变它以便我首先得到图形? 问题答案: 异步,您永远不知道哪个函数先运行\先完成… 想想异步操作,例如告诉一群人跑1英里,您知道谁会先完成吗?(是的,乔恩·斯基特,然后是查克·诺里斯…) 您可以使用Callack来运行第二个ajax:

  • 我希望有人为我指出一些要求的正确方向:我们需要在我们的服务器上发送异步可靠的通知 消息的消费者将随意订阅/取消订阅 消费者的数量将很大 生产者将是一个通知,即使服务器关闭,也不会丢失,如果服务器再次上升将被发送。通知数预计为高 使用的线程数应尽可能少。 鉴于上述(疯狂的)要求,我试图使用activemq / jms来解决这个问题。这似乎是正确的方向吗? 考虑到以上:1.我使用了持久订阅者、jms消

  • 有没有一种更理智的方法来编程以下超级简单的设置/获取/关闭测试程序?请注意,我必须复制 Redis 关闭代码,并将其包含在设置错误路径和获取完整路径中。