Springはセッション/リクエストスコープのBeanで 'destory'メソッドを呼び出すタイミングをどのように知っていますか(つまり、Beanがスコープから外れていることをどのように検出しますか)
私は、リクエスト/セッションリスナーを使用してこれらのイベントの通知を受ける場所を読んでいます。しかし、これらのリスナーはweb.xmlで定義する必要があり、Springリスターでこのようなリスナーを定義することについての言及はありません。それではどうやって動くの?
春の文学でそのようなリスナーを定義することについての言及はありません
ああ、あります:
リクエスト、 session 、およびグローバルセッションレベル(WebスコープBean)でBeanのスコープをサポートするには、豆。[...] Servlet 2.4以上のWebコンテナを使用する場合、Webアプリケーションweb.xmlファイルの宣言に次の javax.servlet.ServletRequestListener を追加する必要があります。 。]
リクエスト
session
Servlet 2.4以上のWebコンテナを使用する場合、Webアプリケーションweb.xmlファイルの宣言に次の javax.servlet.ServletRequestListener を追加する必要があります。 。]
javax.servlet.ServletRequestListener
投稿者: 4.5.4.1初期Web設定を参照してください。
また、SpringはプロトタイプでスコープされたBeanでdestroyを呼び出さない ということにも注意してください。
プロトタイプ
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet はそれを行います。自身のコードを使用します(例:これらのスコープ付きBeanをすべて登録するための org.springframework.web.context.request.RequestAttributes#registerDestructionCallback コールバック・リスト機能
org.springframework.web.servlet.DispatcherServlet
org.springframework.web.context.request.RequestAttributes#registerDestructionCallback
セッションスコープBeanのインタフェース DisposableBean および InitializingBean を実装できます。
DisposableBean
InitializingBean
org.springframework.beans.factory.InitializingBean インタフェースでは、Beanのすべての必要なプロパティがコンテナによって設定された後で、Beanが初期化作業を実行できます。 InitializingBeanインターフェイスは、 afterPropertiesSet()という単一のメソッドを指定します。
org.springframework.beans.factory.InitializingBean
afterPropertiesSet()
org.springframework.beans.factory.DisposableBean インタフェースを実装すると、Beanを含むコンテナが破棄されたときにBeanがコールバックを取得できるようになります。 DisposableBeanインタフェースは、 destroy()という単一のメソッドを指定します。
org.springframework.beans.factory.DisposableBean
destroy()
Read more about it here: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-nature