Юзаю spring events, проблема в том что пересоздается бин подписчика а мне этого не надо. Мне просто нужно свое событие, которое я могу обработать.
Как заюзать офигенную сиситему событий так чтобы бин не переоздавался ?
подписка
| Код | public class Workzone{ @EventListener void onOpenDocument(OpenDocument event) { //бла бла бла } }
|
контейнер
| Код | @Configuration @Import(ecco.arhitector.Context.class) @Lazy public class ScreensConfig { @Bean //@Scope("prototype") public WorkspaceController workspaceController() { // вся эта [S]порнография[/S] магия отношения к теме не имеет, // важно что функция вызывается и ее результатом становится или кэш или новый контроллер load("/app/ui/view.fxml"); WorkspaceController ctrl= loader.getController(); ctrl.view = view; return ctrl; } }
|
вызов
| Код |
public class TreeController extends Toolbox { @PostConstruct void init(){ TreeItem<String> root = createTree(data); projectTree.setRoot(root); //событие вызывается по клику projectTree.setOnMouseClicked(event->{ publisher.publishEvent(new OpenDocument(this,"hello")); }); }
|
само событие
| Код |
public class OpenDocument { private Object doc;
public OpenDocument(Object source, Object doc) { this.doc = doc; }
public Object getDocument() { return doc; } }
|
сообщение в консоле указывающее на то что бин взят из кеша при отработке события, стоял бы на бине @prototype было бы пересоздание
| Код | DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'workzoneController'
|
Примечания Это javafx приложение, но как я понимаю, это нечего не должно менять. В классах только код по теме, а не весь. |