#java #spring
#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>
testProxy
Компонент запрашивается контроллером mvc в сеансовой области. Разве это не целевой тип, указанный в proxyInterfaces
свойстве?
Ответ №1:
Здесь вы путаете свои концепции — вы либо используете, aop:scoped-proxy
либо предоставляете явное ProxyFactoryBean
с соответствующими настройками, а не оба.
Для использования aop:scoped-proxy
:
<bean id="testProxy" class="com.testsession.Test" scope="session">
<aop:scoped-proxy />
</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>
Обратите внимание, что прокси настроен с именем целевого компонента, а не ссылкой на фактический целевой компонент.
Комментарии:
1. Спасибо. Причина, по которой я использовал ProxyFactoryBean, заключается в том, что мне нужно изменить тестовый компонент (который на самом деле является JaxWsPortProxyFactoryBean), возможно, используя перехватчики (чтобы ввести имя пользователя / пароль в BindingProvider). Не могли бы вы рассказать мне, как я это делаю, используя предоставленный вами образец?
2. @Industrious Я добавил пример того, как явно настроить прокси-сервер без использования
aop:scoped-proxy