【问题标题】:Is it possible in Springframework 2.5.6 to have scope="session" create the object on session create在 Springframework 2.5.6 中是否可以让 scope="session" 在会话创建时创建对象
【发布时间】:2014-06-11 17:46:02
【问题描述】:
我有一个使用 Jetspeed 门户和 Springframework 2.5.6 的项目,我需要一个 Jetspeed 级别的服务对每个登录的用户都是唯一的。这最好使用 Spring AOP 和 scope="session" 来完成。问题是,这些是在会话启动后需要立即运行的幕后 bean。似乎 Spring 的 AOP 选择了延迟加载设计,并且在调用 bean 上的方法之前不会创建或初始化实际实现。
有没有办法强制 Spring AOP 在创建会话对象后立即创建新 bean?
【问题讨论】:
标签:
java
spring
session
aop
【解决方案1】:
一个很好的问题。想到的最简单的选择(如果您原谅表达式)是将会话范围的 bean 连接到在会话的第一个请求进入时调用的控制器(为此,控制器必须要么是会话范围的 bean 本身,要么你的 bean 需要使用 aop:scoped-proxy)。
如果可以在会话开始时调用不同的控制器,那么您可以将 bean 连接到会话范围的拦截器中,并配置您的 url 映射以通过拦截器传递请求,确保 bean 正确初始化在会话开始时。
我真的想不出更优雅的方式来做到这一点。您可能会创建一个自定义 HttpSessionListener,它在调用 sessionCreated() 时在应用上下文中调用 getBean("my-session-scoped-bean"),但这有点笨拙。