首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >销毁类的所有会话作用域bean

销毁类的所有会话作用域bean
EN

Stack Overflow用户
提问于 2018-11-11 18:18:58
回答 1查看 705关注 0票数 0

有没有办法销毁某个特定类的所有已创建的会话作用域bean (并在需要时让spring重新创建)?

例如,有2个用户访问应用程序,那么每个用户都有一个bean。我想把这两颗豆子都销毁掉。

使用案例:

管理员正在更新菜单栏。菜单栏列表数据存储在会话范围的bean中。管理员的bean应该被销毁,菜单栏应该被更新。当然,其他人的菜单也应该更新,所以其他人的bean也应该被销毁。

注意1:不同的用户可能看到不同的菜单,所以bean是会话作用域的,而不是单例的。

注意2:我不想使用户的整个会话无效,只想使该bean无效

我找到了this way来销毁当前的范围bean。但是我不能从其他会话中销毁bean。

代码语言:javascript
运行
复制
((ScopedObject) myBean).removeFromScope();

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-11-11 18:27:07

销毁bean并重新创建它们看起来有点夸张,也有点混乱。

对于这样的方法,我更喜欢事件,Spring提供了一个Spring Event API (spring-context依赖项)。

您可以在引发其他bean状态更改的bean类中注入一个ApplicationEventPublisher实例,这些bean可以注册一个even listener ( @EventListener(condition = "..."))来读取此更改事件。

例如发布者:

代码语言:javascript
运行
复制
@Component
public class PublisherBean{

    private final ApplicationEventPublisher publisher;

    @Autowired
    public PublisherBean(ApplicationEventPublisher publisher) { ... }

    public void createOrder(Order order) {
        // ....
        this.publisher.publishEvent(new OrderCreatedEvent(order)); 
    }    
}

订阅者/监听者:

代码语言:javascript
运行
复制
@Component
public class ListenerBean{

  @EventListener(condition = "#creationEvent.awesome")
  public void handleOrderCreatedEvent(CreationEvent<Order> creationEvent) {
    ... 
  }

}

你可以在here上看到更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53247752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档