我想在一个类中处理多个事件,这是我的例子:
@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。
答案 0 :(得分:1)
好吧,这对我来说仍然是个谜。我打赌这是一种奇怪的maven / ide缓存问题,但无论如何这在几次重启后对我有用:
@Lazy(false)
@Component
public class EventListenerImpl {
@EventListener
public void whatever(final ContextRefreshedEvent event) {
event.getSource();
}
}
答案 1 :(得分:0)
我知道这是一个老问题,答案被接受,但我认为它并不能解决问题。我遇到了完全相同的问题,并且能够通过将包含类的事件侦听器 @EventListener
从 base-scan
包的根目录移动到该包的子包来解决它。例如:
<context:component-scan base-package="com.example"/>
只需在 com.example
下创建一个子包(文件夹)并将类放在那里:
com -> example -> foo (place class here)
这对我有用。不知道为什么它在 @EventListener
根目录中找不到 base-package
,但无论如何,它已修复。这似乎是文档中未记录的问题。