Spring 2.5访问Session属性的四种策略 - 编程入门网
有没有提供相应的 handler 呢?如果我们能够对 action 实现注入,出现的种种不足了。
通过查阅 SpringMVC API 文档,SpringMVC 其实也为 action 级别提供了方法参数注入的 Resolver 扩展,允许开发人员给 HandlerMapper 类 set 自定义的 MethodArgumentResolver。 action 的代码如下:
Resolver 的代码如下:
Spring 2.5访问Session属性的四种策略(4)时间:2011-09-07配置文件的相关配置如下:
优点: 1. 具备第二种方案的所有优点 2. 真正做到了按需分配,只在真正需要对象的位置注入具体的对象,减少其他地方对该对象的依赖。 3. 其他人能很容易地从 action 的参数列表得知 action 所需要的依赖,API 更清晰易懂。 4. 对于很多 action 需要的某一类参数,可以在唯一的设置点用很方便一致的方式进行注入。 不足: 1. 对象依赖注入是针对所有 action, 注入粒度还是较粗。不能做到具体 action 访问具体的 Session 属性 (四)通过 SpringMVC 的 SessionAttributes Annotation 关联 User 属性 SpringMVC 文档提到了 @SessionAttributes annotation,和 @ModelAttribute 配合使用可以往 Session 中存或者从 Session 中取指定属性名的具体对象。文档里说; The type-level @SessionAttributes annotation declares session attributes used by a specific handler. This will typically list the names of model attributes which should be transparently stored in the session or some conversational storage, serving as form-backing beans between subsequent requests. 很明显,@SessionAttributes 是用来在 controller 内部共享 model 属性的。从文档自带的例子来看,标注成 @SessionAttributes 属性的对象,会一直保留在 Session 或者其他会话存储中,直到 SessionStatus 被显式 setComplete()。那这个 annotation 对我们有什么帮助呢? 答案就是我们可以在需要访问 Session 属性的 controller 上加上 @SessionAttributes,然后在 action 需要的 User 参数上加上 @ModelAttribute,并保证两者的属性名称一致。SpringMVC 就会自动将 @SessionAttributes 定义的属性注入到 ModelMap 对象,在 setup action 的参数列表时,去 ModelMap 中取到这样的对象,再添加到参数列表。只要我们不去调用 SessionStatus 的 setComplete() 方法,这个对象就会一直保留在 Session 中,从而实现 Session 信息的共享。 controller的代码如下:
Spring 2.5访问S |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |