为bean创建会话范围的代理

时间:2014-06-19 14:28:33

标签: java spring

此配置可能导致异常的问题是什么?

java.lang.IllegalStateException: Cannot create scoped proxy for bean 'scopedTarget.testProxy': Target type could not be determined at the time of proxy creation.

<bean id="test" class="com.testsession.Test" scope="prototype" />

<bean id="testProxy" class="org.springframework.aop.framework.ProxyFactoryBean" scope="session">
    <property name="target" ref="test" />
    <property name="proxyInterfaces"><value>com.testsession.TestIface</value></property>
    <aop:scoped-proxy/>
</bean>

会话范围的mvc控制器请求testProxy bean。这不是proxyInterfaces属性中指定的目标类型吗?

1 个答案:

答案 0 :(得分:2)

你在这里混淆了你的概念 - 你要么使用aop:scoped-proxy 你提供了一个明确的ProxyFactoryBean和适当的设置,而不是两者。

使用aop:scoped-proxy

<bean id="testProxy" class="com.testsession.Test" scope="session">
  <aop:scoped-proxy />
</bean>

明确配置代理bean:

<bean id="test" class="com.testsession.Test" scope="session" />

<bean id="testProxy" class="org.springframework.aop.scope.ScopedProxyFactoryBean">
  <property name="targetBeanName" value="test" />
</bean>

请注意,代理配置了目标bean name ,而不是对实际目标bean的引用。