gpt4 book ai didi

java - 如何将 Spring Application Context 事件桥接到其他上下文

转载 作者:IT老高 更新时间:2023-10-28 13:52:49 26 4
gpt4 key购买 nike

我有一个带有两个上下文的 Spring Web 应用程序:一个 (applicationContext) 由 ContextLoaderListener 构建,第二个 (webContext) 由 DispatcherServlet.

applicationContext 中是一个 bean (org.springframework.security.authentication.DefaultAuthenticationEventPublisher),它会触发 spring 上下文事件。

但是事件的接收者是在 webContext 中定义的。而那个接收者没有得到这个事件。 (如果将用于测试目的的接收器放在 applicationContext 中,那么它会获取事件,但我不能这样做,因为我需要 webContext 来实现其功能。)

所以我的问题是,如何将事件从 applicationContext 连接到 webContext

最佳答案

我遇到了同样的问题,通过将创建事件的 bean 移动到 web 上下文来解决我的问题。但是,您可以通过手动连接事件监听器来解决您的问题,如下所示(此代码未编译,因此未经测试):

@Component    
public class BeanInWebContext implements ApplicationListener<SomeEvent> {

@Autowired
private ApplicationContext webContext;

@PostConstruct
public void registerAsListener() {
// get parent context
AbstractApplicationContext appContext = (AbstractApplicationContext) webContext.getParent();
// register self as a listener, this method is in AbstractApplicationContext
appContext.addApplicationListener(this);
}

@Override
public void onApplicationEvent(SomeEvent event) {
}

}

关于java - 如何将 Spring Application Context 事件桥接到其他上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8534222/

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