O escopo 'sessão' não está ativo para o encadeamento atual; IllegalStateException: nenhuma solicitação de encadeamento encontrada

Eu tenho um controlador que gostaria de ser único por sessão. De acordo com a documentação da primavera, existem dois detalhes para a implementação:

1. Configuração inicial da web

Para suportar o escopo dos beans nos níveis de solicitação, sessão e sessão global (beans com escopo na Web), é necessária alguma configuração inicial menor antes de definir seus beans.

Eu adicionei o seguinte ao meuweb.xml como mostrado na documentação:

<listener>
  <listener-class>
    org.springframework.web.context.request.RequestContextListener
  </listener-class>
</listener>

2. Beans com escopo definido como dependências

Se você deseja injetar (por exemplo) um bean com escopo de solicitação HTTP em outro bean, deve injetar um proxy AOP no lugar do feijão com escopo.

Eu anotei o bean com@Scope fornecendo oproxyMode como mostrado abaixo:

@Controller
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class ReportBuilder implements Serializable {
    ...
    ...
}

Problema

Apesar da configuração acima, recebo a seguinte exceção:

org.springframework.beans.factory.BeanCreationException: Erro ao criar o bean com o nome 'scopedTarget.reportBuilder': o escopo 'session' não está ativo para o encadeamento atual; considere definir um proxy com escopo definido para este bean se você pretende fazer referência a ele a partir de um singleton; A exceção aninhada é java.lang.IllegalStateException: Nenhuma solicitação vinculada ao encadeamento encontrada: você está se referindo a atributos de solicitação fora de uma solicitação da Web real ou está processando uma solicitação fora do encadeamento originalmente recebido? Se você estiver realmente operando dentro de uma solicitação da Web e ainda receber esta mensagem, provavelmente seu código está sendo executado fora do DispatcherServlet / DispatcherPortlet: nesse caso, use RequestContextListener ou RequestContextFilter para expor a solicitação atual.

Atualização 1

Abaixo está a minha verificação de componentes. Eu tenho o seguinte emweb.xml:

<context-param>
  <param-name>contextClass</param-name>
  <param-value>
    org.springframework.web.context.support.AnnotationConfigWebApplicationContext
  </param-value>
</context-param>

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>org.example.AppConfig</param-value>
</context-param>

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

E o seguinte emAppConfig.java:

@Configuration
@EnableAsync
@EnableCaching
@ComponentScan("org.example")
@ImportResource("classpath:applicationContext.xml")
public class AppConfig implements AsyncConfigurer {
  ...
  ...
}

Atualização 2

Eu criei um caso de teste reproduzível. Este é um projeto muito menor, portanto existem diferenças, mas o mesmo erro ocorre. Existem alguns arquivos, então eu o enviei como umtar.gz paramegafileupload.

questionAnswers(8)

yourAnswerToTheQuestion