Создание прокси-сервера с сессионной областью для компонента

#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