Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我能确保我的一个Spring应用程序侦听器最后执行吗?_Java_Spring_Dependency Injection_Event Handling - Fatal编程技术网

Java 我能确保我的一个Spring应用程序侦听器最后执行吗?

Java 我能确保我的一个Spring应用程序侦听器最后执行吗?,java,spring,dependency-injection,event-handling,Java,Spring,Dependency Injection,Event Handling,我有几个服务正在监听Spring事件,以更改我的底层数据模型。这些都是通过实现ApplicationListener来实现的。一旦所有的Foo侦听器修改了底层数据模型,我的用户界面就需要刷新以反映更改(想想fireTableDataChanged()) 有没有办法确保Foo的特定侦听器总是最后一个?或者,当所有其他侦听器都完成时,是否有方法调用函数?如果有必要的话,我正在使用基于注释的连接和Java配置。所有实现ApplicationListener的bean也应该实现并提供合理的订单值。值越低

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


有没有办法确保
Foo
的特定侦听器总是最后一个?或者,当所有其他侦听器都完成时,是否有方法调用函数?如果有必要的话,我正在使用基于注释的连接和Java配置。

所有实现
ApplicationListener的bean也应该实现并提供合理的订单值。值越低,调用侦听器的时间越早:

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;
    }
    //...
}
class FirstListener实现ApplicationListener,有序{
public int getOrder(){
返回10;
}
//...
}
类SecondListener实现ApplicationListener,已排序{
public int getOrder(){
返回20;
}
//...
}
类LastListener实现ApplicationListener,已排序{
public int getOrder(){
返回最低优先级;
}
//...
}

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

您可以尝试在每个侦听器中实现并适当调整顺序吗?@TomaszNurkiewicz看起来很有希望,我会马上尝试。@TomaszNurkiewicz是否介意您将其放在一个答案中,以便我可以为您提供信用?真是太棒了!好的,很高兴我能帮忙。你能确定我没有弄乱顺序吗(最低的优先,而不是最后)?@TomaszNurkiewicz是的,最低的整数是最高的优先级。Ordered.LOWEST_优先级为Integer.MAX_值。是否可能忽略身份验证事件侦听器的顺序?我有
CustomAuthListener实现ApplicationListener,已排序
,但从未调用
返回最低优先级
。幸运的是,我只需听
InteractiveAuthenticationSuccessEvent
而不是
AuthenticationSuccessEvent
来解决我的问题。我希望我能及时找到这个答案。所以请记住,所有bean都应该实现Ordered。否则,即使在优先级最低的Bean之后,也会在排序后执行一次