[轉]HttpSessionBindingListener和HttpSessionAttributeListener區別
HttpSessionBindingListener和HttpSessionAttributeListener是兩個經常讓初學者弄混的監聽器,其實它們有很大的區別。這2個監聽器在文章中簡稱為BindingListener和AttributeListener.
1.BindingListener有2個方法,valueBound(HttpSessinBindingEvent)和valueUnbount(HttpSessionBindingEvent)。實現BindingListener接口的對象被綁 定到session時觸發valueBound事件,解除綁定時觸發valueUnbound事件。舉例來說:
- public class UserObject implements HttpSessionBindingListener{
- public void valueBound(HttpSessionBindingEvent event){
- System.out.println("觸發綁定事件!");
- }
- public void valueUnbound(HttpSessionBindingEvent event){
- System.out.println("解除和session的綁定");
- }
UserObject user = new UserObject();
當把該監聽器保存到session中,session.setAttribute("user",user)時就會觸發valueBound事件.
當該監聽器從session中移除時即session.removeAttribute("user"),觸發valueUnbound事件;session失效或超時
時也會觸發valueUnbound事件。
註意:只有當該監聽器(UserObject)保存到session中或從session移除時才會觸發事件,其他沒有實現該listener對象保存到session時不會觸發該事件。
2.AttributeListener接口有3個方法,attributeAdded(HttpSessionBindingEvent),attributeRemoved(HttpSessionBindingEvent),
attributeReplaced(HttpSeesionEvent)。當在session中添加、移除或更改屬性值時會觸發相應的事件。
例子:
[java] view plain copy- MyListener implements HttpSessionAttributeListener{
- attributeAdded(HttpSessionBindingEvenet event){
- System.out.println("有對象加入session中");
- }
- attributeRemoved(HttpSessionBindingEvent event){
- System.out.println("有對象從session中移除");
- }
- attributeReplaced(HttpSessionBindingEvent event){
- System.out.println("屬性值改變");
- }
- }
OtherObject other = new OtherObject();
當有對象添加到session中時,session.setAttribute("object",other)觸發attributeAdded事件,
當該對象從session移除時,session.removeAttribute("object")觸發attriubteRemoved事件,
當該屬性的值發生變化時, session.replaceAttribute("object",another)觸發attributeRepalced事件。
註意:只要有對象保存到session中或從session中移除或改變屬性的值都會觸發相應事件,不論該對象是否實現了AttributeListener。
總結:
1.只有實現了HttpSessionBindingListener的類,在和session綁定、解除綁定時觸發其事件。
2.實現了HttpSessionAttributeListener後,任何對象(不論其是否實現了AttributeListener)在變化時均觸發對應的事件。
作者:Neil223
地址:https://www.cnblogs.com/Neil223/p/5221154.html
[轉]HttpSessionBindingListener和HttpSessionAttributeListener區別