@EventListener 中的 SPEL 表达式

SPEL expression in @EventListener

以下代码示例摘自 Spring 文档。我的问题是如何传递一个变量来代替 'qux-'。我尝试了#{}、${}。

@EventListener(condition = "event.listenerId.startsWith('qux-')")
    public void eventHandler(ListenerContainerIdleEvent event) {
        ...
    }

在 Spring Boot 中使用 EL 时,您需要用 #{} 包围整个表达式,并且在内部,您必须使用 ${} 以便您可以从应用程序上下文中检索变量。 所以在你的情况下,这应该有效:

@EventListener(condition = "#{'event.listenerId'.startsWith(${'myVariable'})}")

可以做到,但间接...

@Bean
String prefix(@Value("${foo:qux-}") String foo) {
    return foo;
}

@EventListener(condition = "event.listenerId.startsWith(@prefix)")

如果没有属性foo,则使用qux-