gpt4 book ai didi

java - CDI 1.X 异步事件

转载 作者:行者123 更新时间:2023-12-02 10:45:55 25 4
gpt4 key购买 nike

我正在看这个项目https://github.com/MSzturc/cdi-async-events-extension/ ,它在 CDI 1.X 中提供异步事件(内置异步来自 2.0)。

现在我质疑自定义扩展中的这段代码:

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);
}
}

基本上,在注册每个 Bean 时,它会查看每个方法以查看参数是否具有 @Async 注释。

然后,在发现步骤之后,它会注册 @Observes @Async 方法。
查看 JBoss Weld 2 提供的 addObserverMethod() 方法,我发现:

additionalObservers.add(observerMethod);

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

最佳答案

我对项目不熟悉,但从第一眼看上去,它似乎非常过时并且没有维护。

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

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

最终,您可以轻松地尝试并亲自查看,但我建议不要使用该项目,因为您遇到的任何问题都不太可能在项目方面得到解决。

关于java - CDI 1.X 异步事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52578667/

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