我有一个设置为会话范围的 Spring 控制器 bean,它看起来有点像这样:
@Controller
@Scope(WebApplicationContext.SCOPE_SESSION)
@RequestMapping("/test")
public class SessionTestController implements Serializable {
private static final long serialVersionUID = -7735095657091576437L;
private transient Log log;
@PostConstruct
public void initialise() {
log = LogFactory.getLog(getClass());
}
@RequestMapping(method=RequestMethod.GET)
@ResponseBody
public String doGet() throws InterruptedException {
log.warn("This line will fail after deserialisation..."); // Causes NPE
}
}
反序列化后似乎 Spring 没有调用@PostConstruct
,这导致我的“日志”字段变为 null 并在我的doGet()
方法中抛出 NullPointerException。
您通常如何处理会话范围 bean 中的记录器等不可序列化字段?我是否需要实现一些会话感知接口才能使其工作?