【发布时间】:2011-07-13 08:30:30
【问题描述】:
我多次阅读有关此主题的 spring 文档,但有些事情我仍然不清楚。 文档状态:
如果您想将(例如)一个 HTTP 请求范围 bean 注入另一个 bean,则必须注入一个 AOP 代理来代替该范围 bean。也就是说,您需要注入一个代理对象,该对象公开与作用域对象相同的公共接口,但也可以从相关作用域(例如,HTTP 请求)检索真实的目标对象,并将方法调用委托给真实对象.
配置示例如下:
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
<aop:scoped-proxy/>
</bean>
<bean id="userManager" class="com.foo.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>
这里,userManager bean 的作用域是单例。所以,我想知道这个代理的东西是否仅应用于单例bean,也就是说,如果你想将web-scoped bean注入单例bean,或者它也适用于原型bean?例如,如果 userManager 被限定为原型?
我问这个是因为我看到一些代码将会话范围的 bean 注入没有 aop-proxy 的原型中,但我不确定这是否正确......特别是,那些是某些网络中的 DAO bean-应用程序,范围为 session,它们被注入到原型范围的控制器中,用于多用户环境。这是正确的方法吗?一般而言,DAO/Service bean 在 Web 应用环境中的作用域应该如何?
任何想法都将不胜感激。
【问题讨论】:
标签: spring scope dao javabeans httpsession