繁体   English   中英

销毁一个类的所有会话范围的bean

[英]Destroy all session scoped bean of a class

有什么方法可以销毁所有创建的特定类的会话作用域bean(并在需要时让spring重新创建)?

例如,有2个用户访问该应用程序,然后每个用户都有1个bean。 我想销毁所有这两个豆子。

用例:

管理员正在更新菜单栏。 菜单栏列表数据存储在会话作用域bean中。 管理员的bean应该被销毁,菜单栏应该被更新。 当然,其他菜单也应更新,因此其他bean也应销毁。

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

注意2:我不想使整个用户会话无效,而只是使那个bean无效

我发现这种方法可以销毁当前的作用域bean。 但是我无法从其他会话中销毁bean。

((ScopedObject) myBean).removeFromScope();

非常感谢 !!

销毁豆子并重新创建它们似乎过分杀人并且也有些混乱。
对于这种方法,我倾向于使用事件,Spring提供了Spring Event API( spring-context依赖项)。
您可以在Bean类中注入ApplicationEventPublisher实例,该实例引发其他一些Bean的状态更改,并且这些Bean可以注册一个偶数侦听器( @EventListener(condition = "..."))来读取此更改事件。

例如发布者:

@Component
public class PublisherBean{

    private final ApplicationEventPublisher publisher;

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

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

订阅者/听众:

@Component
public class ListenerBean{

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

}

您可以在此处查看更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM