【问题标题】:Spring session-scoped beans as dependencies in prototype beans?Spring会话范围的bean作为原型bean中的依赖项?
【发布时间】: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


    【解决方案1】:

    您始终可以将范围更广的 bean(例如单例)注入到范围更窄的 bean(例如会话范围的 bean)中,但反过来,您需要一个范围代理。

    因此,您将会话范围 bean 注入原型范围 bean 的示例很好,因为会话范围比原型范围“更宽”。

    如果你弄错了,Spring 会告诉你。如果它不抱怨,那么你就不需要它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多