我多次阅读了有关这个主题的 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>
Here, 用户管理器bean 的作用域为单例。所以,我想知道这个代理的事情是否适用only到单例范围的bean,也就是说,如果你想将Web范围的bean注入到单例bean中,或者它也适用于原型bean?例如,如果用户管理器被定为原型?
我问这个问题是因为我看到一些代码将会话范围的 bean 注入到没有 aop-proxy 的原型中,但我不确定这是否正确......特别是,那些是某些网络应用程序中的 DAO bean,范围作为session,并且它们被注入到原型范围的控制器中,用于多用户环境。这是正确的方法吗?一般来说,DAO/Service bean 在 Web 应用程序环境中的范围应该如何?
任何想法将不胜感激。
您始终可以将更广泛范围的 bean(例如单例)注入到更窄范围的 bean(例如会话范围 bean)中,但相反,您需要一个范围代理。
因此,将会话范围 bean 注入原型范围 bean 的示例很好,因为会话范围比原型范围“更宽”。
如果你弄错了,Spring 会告诉你。如果它不抱怨,那么你就不需要它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)