Spring RequestScope метода в XML-конфиге

У меня есть модуль со следующим:

@Configuration
public class UserHolder {

    @Bean
    @RequestScope
    public IUser getUser() {
         return (IUser)SecurityContextHolder.getContext().getAuthentication();
    }
}

IUser Интерфейс, и это прекрасно работает для всех модулей java-config, которые используют этот компонент. @Autowired IUser user

Однако у нас есть более старый проект с xml-config. Там bean-компонент инициализируется во время развертывания (которое, конечно, равно нулю), но нет прокси-сервера для получения правильного пользователя во время запроса.

Что я написал сейчас (что явно неверно):

<bean class="...UserHolder" scope="request">
    <aop:scoped-proxy/>
</bean>

Мне нужно определить bean-компонент в UserHolder: getUser в XML. Но это возвращает интерфейс, поэтому я не могу определить класс там...

<bean class="...UserHolder"></bean>
<bean class"...IUser" scope="request"> <!-- Interface can't be inserted here -->
     <aop:scoped-proxy/>
</bean>

Версии Spring для модуля, который определяет UserHolder:

  • весна: 4.2.6. ВЫПУСК
  • Spring-Security: 4.1.0. РЕЛИЗ

Версии Spring для модуля с xml-config, использующего модуль UserHolder:

  • весна: 3.2.15.Релиз
  • Spring-Security: 3.2.9. РЕЛИЗ

Любая помощь будет оценена!

Спасибо!

1 ответ

Решение

Мне удалось это исправить с помощью фабричных бобов:

<bean id="userHolder"
      class="...UserHolder">
</bean>

<bean id="user"
      class="...IUser"
      factory-bean="userHolder"
      factory-method="getUser"
      scope="request"
      primary="true">
    <aop:scoped-proxy/>
</bean>
Другие вопросы по тегам