Я хотел бы использовать Spring Event для «говорить» с моими бобами в своем веб-приложении.Запрос на весну и масштаб весны
Так, например, мой боб, который запускает событие, как это:
@Controller
@Scope("request")
@KeepAlive
public class Controller extends InitializingBean, ApplicationEventPublisherAware {
private ApplicationEventPublisher applicationEventPublisher;
public void test() {
applicationEventPublisher.publishEvent(new TestEvent(this));
}
}
И мой слушатель событий, как это:
@Component
@Scope("request")
@KeepAlive
public class Module implements ApplicationListener<TestEvent> {
@Override
public void onApplicationEvent(TestEvent event) {
}
}
Наиболее важным моментом является то эти бобы запрос сфера потому что они должны быть инициализированы при каждом вызове страницы.
Но в запуске, я получаю сообщение:
вызвано следующими причинами: java.lang.IllegalStateException: Нет запроса Thread переплете найдено: Вы имеете в виду атрибуты запроса за пределами фактического веб-запроса, или обработки запроса вне исходного потока ? Если вы фактически работаете в веб-запросе и все еще получаете это сообщение, ваш код, вероятно, работает за пределами DispatcherServlet/DispatcherPortlet: В этом случае используйте RequestContextListener или RequestContextFilter, чтобы выставить текущий запрос .
Как если весна попытаться создать экземпляр моего модуля боба в запуске и в качестве компонента является запрос области применения, она не может сделать это (запрос контекста не экземпляр)
Если удалить управление событиями, все работает отлично.
Итак, мой вопрос:
Можно ли иметь слушатель события запрос сферы? И как это сделать?
Благодаря
Я не могу этого сделать, потому что Spring дает новый экземпляр при каждом вызове метода getModule и не имеет экземпляра для каждого запроса. Это проблема прокси-запроса запроса – Kiva
Поскольку ваш обработчик событий не реализует ApplicationListener напрямую и получает событие через композицию (уже отфильтрованную с 3.0), ваша начальная проблема решена. Поскольку ваш обработчик событий теперь является прокси-сервером, он может быть введен в одноэлементный компонент. см. http://static.springsource.org/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes-other-injection –