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

标签 java spring events

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

相关文章:

MySQL事件根据表DATETIME执行

java - 谁在 Spring Security 中创建了 JSESSIONID cookie?

javascript - mouseout 事件的问题

java - 将字符串流转换为字符串分组列表的有效方法

java - 限制 Java 控制台堆占用空间?

Spring RestTemplate(setBufferRequestBody为false)不喜欢MultiValueMap请求体,它包含一个InputStream对象

java - Tomcat 使用 Spring MVC 返回 404 页面;未到达 Controller

javascript - 我可以确定每个事件处理程序都将完成执行吗?

java - String.toUpperCase 可以去除重音或不去除重音

java - 为什么请求会发送到 Struts Dispatcher?