[英]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.