我有一个使用 Jetspeed 门户和 Springframework 2.5.6 的项目,我需要 Jetspeed 级别的服务对于每个登录用户都是唯一的。这最好使用 Spring AOP 和 scope="session"来完成。问题是,这些是在 session 启动后需要立即运行的幕后 bean。看起来 Spring 的 AOP 选择了延迟加载设计,直到调用 bean 上的方法时才创建或初始化实际实现。
有没有办法强制 Spring AOP 在创建 session 对象后立即创建新 bean?
最佳答案
一个很好的问题。想到的最简单的选择(如果你会原谅这个表达式)是将你的 session 范围的 bean 连接到当 session 的第一个请求进入时调用的 Controller (并且为了做到这一点, Controller 必须要么是 session 范围的 bean 本身,要么您的 bean 需要使用 aop:scoped-proxy
)。
如果在 session 开始时可以调用不同的 Controller ,那么您可以将 bean 连接到一个 session 范围的拦截器中,并配置您的 url 映射以通过拦截器传递请求,确保 bean 被正确初始化在 session 开始时。
我真的想不出更优雅的方法来做到这一点。您可能会创建一个自定义 HttpSessionListener
,它在 sessionCreated()
时在应用上下文中调用 getBean("my-session-scoped-bean")
被调用,但这有点笨拙。
关于java - 在 Springframework 2.5.6 中是否有可能在 ="session"范围内创建 session 创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1493080/