我有几个服务正在侦听Spring事件以更改我的基础数据模型。这些都是通过实施ApplicationListener<Foo>
来实现的。一旦所有Foo
侦听器修改了基础数据模型,我的用户界面就需要刷新以反映更改(想想fireTableDataChanged()
)。
有没有办法确保Foo
的特定侦听器始终持续?或者有没有办法在所有其他听众完成后调用函数?我正在使用基于注释的布线和Java配置,如果这很重要的话。
答案 0 :(得分:29)
实施ApplicationListener
的所有bean也应实施Ordered
并提供合理的订单价值。值越低,您的侦听器就越快被调用:
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
以确保始终首先调用您的一个侦听器。