您所说的想法是使用会话范围 bean 的一种方法。您可以定义会话范围的 POJO:
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class YourSessionBean{
...
}
然后你可以将它注入到你的控制器类中:
@Controller
public class YourController {
@Autowired
private YourSessionBean yourSessionBean;
...
}
您还可以使用@SessionAttributes http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-sessionattrib将 POJO 存储到会话中:
public class YourObject {
...
}
你可以使用@SessionAttributes
在控制器中添加注释以放置一个实例YourObject
进入会话:
@Controller
@SessionAttributes("yourObj")
public class YourController {
...
@RequestMapping(value="/url")
public ModelAndView process(...) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("yourObj", new YourObject()); // this will put YourObj into session
return modelAndView;
}
}
但是,在使用时@SessionAttributes
,您应该考虑下面的语句块(复制自@SessionAttributes 文档 http://docs.spring.io/spring/docs/3.1.4.RELEASE/javadoc-api/org/springframework/web/bind/annotation/SessionAttributes.html):
注意:使用此注释指示的会话属性对应
到特定处理程序的模型属性,透明地存储
在对话会话中。一旦这些属性将被删除
处理程序指示其会话会话完成。所以,
使用此工具来处理以下会话属性
应该在过程中临时存储在会话中
特定处理程序的对话。
对于永久会话属性,例如用户认证对象,
请改用传统的 session.setAttribute 方法。
您还可以使用HttpSession
作为你的方法参数@RequestMapping
处理程序方法,然后将 POJO 类添加到会话中:
@Controller
public class YourController {
...
@RequestMapping(value="/url")
public ModelAndView process(HttpSession session,...) {
ModelAndView modelAndView = new ModelAndView();
session.setAttribute("yourObj", yourObj);
...
return modelAndView;
}
}