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

时间:2014-04-03 20:41:12

标签: spring-mvc

鉴于@RestController如此:

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

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

1 个答案:

答案 0 :(得分:5)

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

修改:添加一些有关其工作原理的详细信息 -

会话范围由SessionScope类处理,该类在内部具有registerDestructionCallback方法。现在,这个回调是通过DestructionCallbackBindingListener触发的,@PostDestroyHttpSessionBindingListener,它监听会话到期并触发对相关范围bean的{{1}}方法的调用。