gpt4 book ai didi

java - Spring如何过滤ApplicationEvents

转载 作者:行者123 更新时间:2023-11-29 03:21:48 24 4
gpt4 key购买 nike

我一直在研究 Spring 中的事件监听器并遇到了 ApplicationListener界面。例如,哪个可以使用泛型:

public class CStopEventHandler 
implements ApplicationListener<ContextStoppedEvent>{

public void onApplicationEvent(ContextStoppedEvent event) {
System.out.println("ContextStoppedEvent Received");
}
}

由于通用类型在运行时被删除,事件调度程序如何在运行时知道 ApplicationListener 的类型?它是否使用反射或类似的东西检查方法签名?

最佳答案

你是对的。 Spring(当然还有整个 Java)在运行时使用反射来确定 generic type来自提供的类(class)。

在我们的案例中,应用程序上下文扫描 bean 以查找 ApplicationListener实现并将它们全部存储在列表中。

当你提出 ApplicationEvent ApplicationListener 的列表处理 s 以确定特定事件类型的监听器,并将它们存储在缓存中以供将来优化。

但在那之前你的 ApplicationListener<?>被包装到 GenericApplicationListenerAdapter调用它的 supportsEventType使用提供的通用类型 ApplicationListener .

我想你想知道这个方法:

static Class<?> resolveDeclaredEventType(Class<?> listenerType) {
return GenericTypeResolver.resolveTypeArgument(listenerType, ApplicationListener.class);
}

然后使用 GenericTypeResolver当您需要知道 generic type 时,可以从您的代码中的任何地方在运行时。

关于java - Spring如何过滤ApplicationEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170014/

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