我可以引用用 SpEL 编写的条件元素中的局部字段吗?

Can I refer to a local field in condition element written in SpEL?

使用以下代码,

@EventListener(condition = "#event.type == T(...MyDomainEvent.Type).INSERTED")
void inserted(final MyDomainEvent<T> event) {
    // 
}

protected final Class<?> sourceType;

我可以比较条件元素中的 sourceTypeevent.getSource().getClass() 吗?

不,您不能在一般意义上引用字段值;但是,如果您知道 bean 名称,则可以,因为评估上下文有一个 bean 解析器...

@Bean
public Foo fooBean() {
    return new Foo();
}

public static class Foo {

    public String sourceType = "xxx";

    @EventListener(condition = "@fooBean.sourceType.equals('xxx')")
    public void inserter(Object event) {
        System.out.println(event);
    }

    protected String getSourceType() {
        return this.sourceType;
    }

    protected void setSourceType(String sourceType) {
        this.sourceType = sourceType;
    }

}