范围内的 Spring 事件可能吗?

Spring 事件机制支持发布应用程序事件并通过@EventListener注解在 Spring 组件内监听这些事件。但是,我在文档中找不到有关在特定范围内发送事件的任何信息。我对 Vaadin 的具体需求是:

  • 在用户交互的上下文中,发送事件(例如登录事件)

  • 此事件应仅由相同的 bean 使用@UIScope,即不应影响其他用户 UI

那可能吗?注意:这并不是 Vaadin 特有的。我还可以询问如何使用 Spring web mvc 请求范围来完成。


开满天机
浏览 191回答 2
2回答

慕少森

请看看这是否是您要找的:主要应用:   package com.fg7.evision.EventList;    import org.springframework.context.annotation.AnnotationConfigApplicationContext;    import org.springframework.context.annotation.ComponentScan;    @ComponentScan(basePackages = "com.fg7.evision.EventList")    public class EventApplication {        public static void main(String[] args) {           MyScopedEvent event = new MyScopedEvent("hello world");           AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(EventApplication.class);            ctx.publishEvent(event);        }    }事件 : package com.fg7.evision.EventList;    public class MyScopedEvent  {        private String message;        public MyScopedEvent( String message) {            this.message = message;        }        public String getMessage() {            return message;        }    }事件侦听器的范围仅限于单例范围。package com.fg7.evision.EventList;import org.springframework.beans.factory.BeanNameAware;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.event.EventListener;import org.springframework.stereotype.Component;@Component(value = "listener")public class ScopedEventListener implements BeanNameAware {    @Autowired    ConfigurableApplicationContext context;    String beanName;    @Override    public void setBeanName(String name) {        this.beanName = name;    }    @EventListener(condition = "@listener.getScope() == 'singleton'")    public void handleEvent(MyScopedEvent myScopedEvent) {        System.out.println(myScopedEvent.getMessage());    }    public String getScope(){        return this.context.getBeanFactory().getBeanDefinition(this.beanName).getScope();    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go