The Spring documentation提供了以下示例,向我们展示了我们需要定义aop的原因:范围会话,请求等bean中显式的scoped-proxy。
<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>
我们需要代理,因为对于userPreferences
bean的每个请求,我们都希望将其委托给实际的会话范围的bean实例。很清楚。但是文档还说这对于singletone/prototype
范围的bean来说是一种愚蠢的行为。
考虑以下示例:
<bean id="userPreferences" class="com.foo.UserPreferences" />
<bean id="userManager" class="com.foo.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>
为什么在singletone
- 作用域bean的情况下我们需要代理?不注入和调用代理会导致一些性能开销吗?
问题 :对于性能问题,我们是否可以避免在singletone
- 作用域bean的情况下注入代理并注入实际的bean实例?