我在Spring Controller中有一个AOP代理会话范围的bean,它在关闭浏览器后甚至在web.xml
中配置的会话超时30分钟后都不会消亡。浏览器关闭或会话超时后是否可以销毁bean?我在Tomcat 7服务器上使用Spring 3.2.2模块
更新:使用会话监听器后,这就是我发现的。
因此,只有在重新启动服务器后,绑定值才会丢失。当'n'会话被销毁时,为什么没有销毁豆类?
SSCCE:
@Controller
@RequestMapping("/app")
public class MyAppController {
// AOP session scoped proxy type CGLIB
@Autowired private InputForm inputForm;
@RequestMapping(value = "/home", method = RequestMethod.GET)
public ModelAndView returnHome() {
Map<String, Object> modelMap = new HashMap<String, Object>();
modelMap.put("inputForm", inputForm);
return new ModelAndView("homePage", modelMap);
}
}
public class InputForm {
private String id;
private String name;
private String phoneNo;
private List<Person> personKeys = new AutoPopulatingList<Person>(Person.class);
public void init() {
this.getPersonKeys().add(new Person(this.id, this.name, this.phoneNo));
}
// getters and setters
}
<bean id="inputForm" class="<package>.InputForm"
scope="session" init-method="init">
<property name="id" value="${property_id}"/>
<property name="name" value="${property_name}"/>
<property name="phoneNo" value="${property_phone}"/>
<aop:scoped-proxy proxy-target-class="true"/>
</bean>
答案 0 :(得分:4)
绝对没有办法 1 来检测浏览器关闭。当会话超时并且无效时,bean将会死亡。
1 <子>(故障安全)子>