栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否可以使Spring ApplicationListener侦听2种或更多类型的事件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否可以使Spring ApplicationListener侦听2种或更多类型的事件?

请参阅此答案结尾的Spring 4.2更新!

春季 <4.2

并不是的。

您可以为参数(例如ApplicationEvent)使用公共超类,也可以使用Foo和Bar实现的公共接口,然后必须自行调整它。

public class ListenerClass implements ApplicationListener<ApplicationEvent> {    ...    if(event instanceOf Foo || event instance of Bar) {    }}

另一种方法是使用两个应用程序监听器

public class ListenerClass {    void onFoo(Foo foo){}    void onBar(Bar bar){}    static class FooListener implements ApplicationListener<Foo> {       ListenerClass listerner;       ....       public void onApplicationEvent(Foo foo) {listener.onFoo(foo);       }    }    static class BarListener implements ApplicationListener<Bar> {       ListenerClass listerner;       ....       public void onApplicationEvent(Bar bar) {listener.onBar(bar);       }    }}

重要提示: 所有3个实例都必须是四季豆!


当然,您可以自己实现此类功能。您至少有两个不同的选择,使它们基于spring事件调度程序框架,或者将其完全分开。对于第二个选择,请防御性地看一下CDI-
Event Mechanim,并可以搜索一些弹簧端口。

几年前(我猜是在2007/2008年),我已经靠自己实现了第一选择。我有一个负责听所有事件的事件调度程序。它是通过XML文件配置的。此xml文件包含“引用”!Bean中应分派的每个事件的方法-
该方法将通过反射调用。因此,有可能拥有强大的类型化事件处理程序方法(这是该方法的目的),但也可能在一个类中具有多个处理程序方法。如今,我将跳过xml文件,并使用注释和Bean后处理器


Spring 4.2 更新

Spring 4.2将具有改进的事件侦听器配置(基于注释),这使得在一个bean中具有两个不同的事件侦听器方法成为可能。

@Componentpublic class ListenerClass {  @EventListener  public void handleFooEvent(Foo fooEvent) {...}  @EventListener  public void handleBarEvent(Bar barEvent) {...}}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515794.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号