Spring @EventListener注释不起作用

时间:2016-02-10 11:26:27

标签: spring event-handling

我想在一个类中处理多个事件,这是我的例子:

@Lazy(false)
@Component
public class EventListenerImpl {

    @EventListener
    public void handleContextRefreshedEvent(ContextRefreshedEvent event) {
        LOGGER.log(event.getSource());
        ...
    }
}

但是,当我的应用程序启动时,此方法仍未执行。

applicationContext.xml我有:

<context:annotation-config/>
<context:component-scan base-package="..."/>
根据文档,

应该足以让@EventListener工作。

实现ApplicationListener<ContextRefreshedEvent>的旧方法效果很好。

我正在使用Spring 4.2.4.RELEASE。

2 个答案:

答案 0 :(得分:1)

好吧,这对我来说仍然是个谜。我打赌这是一种奇怪的maven / ide缓存问题,但无论如何这在几次重启后对我有用:

@Lazy(false)
@Component
public class EventListenerImpl {

    @EventListener
    public void whatever(final ContextRefreshedEvent event) {
        event.getSource();
    }
}

答案 1 :(得分:0)

我知道这是一个老问题,答案被接受,但我认为它并不能解决问题。我遇到了完全相同的问题,并且能够通过将包含类的事件侦听器 @EventListenerbase-scan 包的根目录移动到该包的子包来解决它。例如:

<context:component-scan base-package="com.example"/>

只需在 com.example 下创建一个子包(文件夹)并将类放在那里:

com -> example -> foo (place class here)

这对我有用。不知道为什么它在 @EventListener 根目录中找不到 base-package,但无论如何,它已修复。这似乎是文档中未记录的问题。