我多次阅读有关此主题的春季文档,但有些事情我仍然不清楚。文档指出:
如果您想(例如)将一个 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被限定为原型?
我问这个是因为我看到一些代码在没有 aop-proxy 的情况下将会话范围的 bean 注入原型,但我不确定这是否正确......特别是,那些是某些 web 应用程序中的 DAO bean,范围作为session,它们被注入到原型范围的控制器中,用于多用户环境。这是正确的方法吗?一般而言,DAO/服务 bean 在 Web 应用程序环境中的范围应该如何?
任何想法将不胜感激。