Я использую Vaadin Spring 1.0.0 и пытаюсь понять, как я могу внедрить bean-компоненты, доступные только в рамках пользовательского интерфейса (когда пользователь открыл страницу) в классические bean-компоненты spring @Component
. Просто, давайте классы:
@Component
public class A {
@Inject
private IB b;
}
@UIScope
@SpringComponent
public class B implements IB {
}
И, очевидно, во время запуска:
Caused by: java.lang.IllegalStateException: No VaadinSession bound to current thread
Что такое нормальный способ, как это сделать? Я понимаю всю концепцию, что bean-компоненты инициализируются при запуске, когда область пользовательского интерфейса недоступна, но я использую общие библиотеки, которые реализованы в Spring с помощью @Component
, и я хочу реализовать некоторые интерфейсы, но я могу сделать это только в области пользовательского интерфейса. а не при запуске.
A
также должен быть UIScope. - person Mark Rotteveel   schedule 14.10.2015...Anything injected with that annotation will get the same instance while within the same UI. Load a different UI and you'll get a different instance. If the session expires or the UI is closed, the instances will be cleaned up.
- person Morfic   schedule 14.10.2015A
взят из общей библиотеки и использует десятки других классов. Это означает, что я должен добавить@UIScope
к каждому зависимому классу в общей библиотеке. Однако эта общая библиотека также используется в приложениях с весенней загрузкой, где нет области пользовательского интерфейса или Vaadin. - person Mejmo   schedule 14.10.2015UI.getInstance().getSomeBean()
. Это хакерский способ, но в следующий раз я бы вообще не использовал интеграцию spring/vaadin. - person Mejmo   schedule 27.07.2019