会话范围的Spring MVC控制器上的@PreDestroy

jks*_*der 2 spring-mvc

鉴于@RestController如此:

@RestController
@Scope("session")
public class MyController {
    @PreDestroy
    public void onSessionDestroyed() {
        // clean stuff up...
    }
}
Run Code Online (Sandbox Code Playgroud)

onSessionDestroyed()会话到期时会被调用吗?

Bij*_*men 5

是的,您的@PreDestroy注释方法将在会话到期时调用.不调用@PreDestroy注释方法的唯一范围是Prototype范围.

编辑:添加更多有关其工作原理的细节 -

会话范围由SessionScope具有registerDestructionCallback内部方法的类 处理.现在,通过一个HttpSessionBindingListener触发此回调DestructionCallbackBindingListener,该HttpSessionBindingListener侦听会话到期并触发@PostDestroy对相关作用域bean的方法的调用.