Spring如何知道何时在会话/请求范围内调用'destory'方法(换句话说,它如何检测相关bean是否超出范围)?
我在某处读到它使用请求/会话侦听器来通知这些事件。但是这些列表器需要在web.xml中定义,并且没有提到在Spring文献中定义这样的监听器。那么这是如何工作的?
答案 0 :(得分:2)
并没有提到在Spring文献中定义这样的听众
哦,有:
为了支持在
request
,session
和全局会话级别(Web范围的bean)中对bean进行范围设定,在定义bean之前需要进行一些小的初始配置。[... ]如果您使用Servlet 2.4+ Web容器,则需要将以下
javax.servlet.ServletRequestListener
添加到Web应用程序web.xml文件中的声明[...]
来自:4.5.4.1 Initial web configuration。
另请注意,Spring在prototype
- 范围内的bean上执行不调用destroy。
答案 1 :(得分:2)
org.springframework.web.servlet.DispatcherServlet
做到了。它使用自己的代码,例如注册所有这些范围内的bean的org.springframework.web.context.request.RequestAttributes#registerDestructionCallback
回调列表功能。
答案 2 :(得分:1)
您可以为会话范围的bean实现接口DisposableBean
和InitializingBean
。
org.springframework.beans.factory.InitializingBean
接口允许bean在容器设置bean的所有必要属性后执行初始化工作。 InitializingBean接口指定单个方法afterPropertiesSet()
。
实现org.springframework.beans.factory.DisposableBean
接口允许bean在包含它的容器被销毁时获得回调。 DisposableBean接口指定单个方法destroy()
。