是否可以在Springframework 2.5.6中使用scope =“session”在会话创建时创建对象

时间:2009-09-29 14:56:30

标签: java spring session aop

我有一个使用Jetspeed门户和Springframework 2.5.6的项目,我需要一个Jetspeed级别服务,对于每个登录的用户都是唯一的。这最好使用Spring AOP和scope =“session”。问题是,这些都是幕后的bean,需要在会话启动时立即运行。看来Spring的AOP选择了一个延迟加载设计,并且在调用bean的方法之前不会创建或初始化实际的实现。

有没有办法在创建会话对象后强制Spring AOP创建新bean?

1 个答案:

答案 0 :(得分:2)

一个很好的问题。想到的最简单的选择(如果您将原谅表达式)是将会话范围的bean连接到会话的第一个请求进入时调用的控制器(为此,控制器必须或者是一个会话范围的bean本身,或者你的bean需要使用aop:scoped-proxy)。

如果可以在会话开始时调用不同的控制器,那么您可以将bean连接到会话范围的拦截器,并配置您的url映射以通过拦截器传递请求,确保bean被初始化正确在会议开始时。

我无法想到一种更优雅的方式来做到这一点。您可能会在调用HttpSessionListener时创建一个在应用上下文中调用getBean("my-session-scoped-bean")的自定义sessionCreated(),但这有点笨拙。