java - 无法在上下文加载之前在 spring 中发布自定义事件

标签 java spring spring-mvc spring-annotations

我正在尝试在 Spring MVC 中发布一个自定义事件,但是在加载上下文时没有触发,下面是代码片段,

onConnectionOpened 将在连接到使用@PostConstruct 初始化bean 后触发的服务器后调用

@Autowired
private ApplicationEventPublisher publisher;

public void onConnectionOpened(EventObject event) {
    publisher.publishEvent(new StateEvent("ConnectionOpened", event));

}

我在下面的监听器部分使用注释

@EventListener
public void handleConnectionState(StateEvent event) {
   System.out.println(event);
}

我能够看到在加载或刷新上下文后触发的事件,这是否预期可以在加载或刷新上下文后发布自定义应用程序事件?

我正在使用 Spring 4.3.10

提前致谢

最佳答案

@EventListener 注释由 EventListenerMethodProcessor 处理一旦所有 beans 被实例化并准备好,它将立即运行。当您从带注释的 @PostConstruct 方法发布事件时,可能不是所有的事情都在那个时刻启动并运行,并且尚未检测到基于 @EventListener 的方法.

相反,您可以使用 ApplicationListener接口(interface)获取事件并处理它们。

public class MyEventHandler implements ApplicationListener<StateEvent> {

    public void onApplicationEvent(StateEvent event) {
        System.out.println(event);
    }
}       

关于java - 无法在上下文加载之前在 spring 中发布自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47271498/

相关文章:

javascript - 验证 JWT 时如何处理每用户签名 key ?

java - 为什么 @Validated + @Component + Implement 会在 Spring Boot 中导致类型误导性错误?

java - 在 Java 中验证 Maven 值

java - 访问保存在类路径中的 Microsoft Access 数据库

java - 如何使用我的 xml 布局文件创建自定义 ListView?

java - 创建 Maven 项目,无法解析原型(prototype),连接被拒绝

java - 有没有办法转换自定义对象并在收到 POSTed JSON 后在方法签名中验证它?

java - log4j2 使用 slf4j 关闭所有附加程序

java - 无法使用 jackson 将具有内部对象的JSON解析为Java对象

java - 创建新实例时使用泛型类型的变量