Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring events и пересоздание бинов


Автор: 4dinterface 8.7.2017, 18:54
Юзаю 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 приложение, но как я понимаю, это нечего не должно менять. В классах  только код по теме, а не весь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)