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



是否有任何方法可以销毁特定类的所有已创建的会话范围的bean(并在需要时让spring重新创建(?

例如,两个用户访问应用程序,然后每个用户将有一个bean。我想把这两颗豆子全部销毁。

用例:

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

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

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

我找到了销毁当前scopebean的方法。但我无法从其他会话中销毁bean。

((ScopedObject) myBean).removeFromScope();

非常感谢!!

销毁并重新创建bean似乎有些过头了,也有点混乱
对于这种方法,我更喜欢事件,并且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) {
... 
}
}

你可以在这里看到更多信息。

最新更新