gpt4 book ai didi

java - 上下文之间的Spring通信

转载 作者:行者123 更新时间:2023-12-01 14:18:44 26 4
gpt4 key购买 nike

我需要将消息/事件从 rootContext 管理的 bean 发送到 mvcContext 管理的 bean。

我的 webapp 由以下部分组成:- RootContext (applicationContext) :数据库、dao beans、服务 beans、安全性等- 一个 mvc 上下文(web.xml 中的 servlet 条目):管理 Controller 、restcontroller 和端点(websocket)

每次(在服务 bean 中)创建一个新行时,我都需要广播到所有 Activity 的 websocket session 。

我在服务 bean 中使用 ApplicationEventPublisherAware 来发布事件,并在目标 bean 中使用 @EventListener 来处理它:但事件不会在 rootContext 之外广播。

如果我在 mvcContext 中移动服务 bean,就可以了但是我需要 rootContext 中的服务 bean,因为另一个组件使用它(其他 servlet(web.xml 中的 servlet 条目);spring-batch 任务;等等...)

我该怎么办?

PS:抱歉英语不好

最佳答案

您可以在子上下文中创建一个 bean,将自己注册为父上下文的监听器,并在收到事件后将其重新发布到子上下文。

public class ContextBridgingApplicationListener implements ApplicationListener, ApplicationEventPublisherAware, ApplicationContextAware, SmartInitializingSingleton {

private ApplicationContext context;
private ApplicationEventPublisher publisher;

public void afterSingletonsInstantiated() {
ApplicationContext parent = context.getParent();
if (parent != null && parent instanceof ConfigurableApplicationContext) {
((ConfigurableApplicationContext) parent).addApplicationListener(this);
}
}

public void onApplicationEvent(ApplicationEvent evt) {
this.publisher.publishEvent(evt);
}

// Setters ommitted

}

还没有测试过它,或多或少是从我的头顶输入的。但是将这个 bean 放在子上下文中,应该使它能够从父上下文接收事件并将它们广播到子上下文。

注意: 这可能有一个缺陷,那就是您可能会陷入事件循环。当 child 再次发布给 parent 时。所以你可能需要一个解决方案 ....

关于java - 上下文之间的Spring通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32405102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com