有没有办法销毁某个特定类的所有已创建的会话作用域bean (并在需要时让spring重新创建)?
例如,有2个用户访问应用程序,那么每个用户都有一个bean。我想把这两颗豆子都销毁掉。
使用案例:
管理员正在更新菜单栏。菜单栏列表数据存储在会话范围的bean中。管理员的bean应该被销毁,菜单栏应该被更新。当然,其他人的菜单也应该更新,所以其他人的bean也应该被销毁。
注意1:不同的用户可能看到不同的菜单,所以bean是会话作用域的,而不是单例的。
注意2:我不想使用户的整个会话无效,只想使该bean无效
我找到了this way来销毁当前的范围bean。但是我不能从其他会话中销毁bean。
((ScopedObject) myBean).removeFromScope();非常感谢!
发布于 2018-11-11 18:27:07
销毁bean并重新创建它们看起来有点夸张,也有点混乱。
对于这样的方法,我更喜欢事件,Spring提供了一个Spring Event API (spring-context依赖项)。
您可以在引发其他bean状态更改的bean类中注入一个ApplicationEventPublisher实例,这些bean可以注册一个even listener ( @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) {
...
}
}你可以在here上看到更多信息。
https://stackoverflow.com/questions/53247752
复制相似问题