簡體   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