我有一个带有两个上下文的 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/