java - 我可以确保我的 Spring ApplicationListener 之一最后执行吗?

标签 java spring dependency-injection event-handling

我有几个服务正在监听 Spring 事件以更改我的底层数据模型。这些都是通过实现 ApplicationListener<Foo> 来实现的。 .一旦所有Foo监听器修改底层数据模型,我的用户界面需要刷新以反射(reflect)更改(想想 fireTableDataChanged() )。

有什么方法可以确保 Foo 的特定监听器总是最后?或者有什么方法可以在所有其他监听器完成后调用函数?我正在使用基于注释的布线和 Java 配置,如果这很重要的话。

最佳答案

所有实现 ApplicationListener 的 bean 也应该实现 Ordered并提供合理的订单值(value)。值越低,你的监听器就会越早被调用:

class FirstListener implements ApplicationListener<Foo>, Ordered {
    public int getOrder() {
        return 10;
    }
    //...
}

class SecondListener implements ApplicationListener<Foo>, Ordered {
    public int getOrder() {
        return 20;
    }
    //...
}

class LastListener implements ApplicationListener<Foo>, Ordered {
    public int getOrder() {
        return LOWEST_PRECEDENCE;
    }
    //...
}

此外,您还可以实现 PriorityOrdered以确保始终首先调用您的一个监听器。

关于java - 我可以确保我的 Spring ApplicationListener 之一最后执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10898417/

相关文章:

java - 在 Java 中访问 AST 的现代方法

java - Lucene 的评分如何取决于查询的相对位置?

java - 从 alfresco 存储库加载 FTL 模板文件

Java Util Logging 重定向到 Log4j2 不适用于 Spring Boot 应用程序

java - 我可以更改用于注入(inject)处理程序的上下文吗?

java - 访问用作缓存的HashMap

java - org.h2.jdbc.JdbcSQLException : Schema "SYS" not found; SQL statement: select name from sys. 序列 [90079-192]

java - Spring 中的有状态和无状态 Bean

java - 依赖注入(inject)如何在没有构造函数的情况下实例化一个类?

c# - Dispose 被 Microsoft DependencyInjection 多次调用