Заменяет ли Spring вызовы методов существующим bean-компонентом в конфигурации Java?

Я прав, что метод loadView будет вызываться только один раз (при создании mainView bean-компонента)?

@Configuration
public class Config {

    @Bean(name = "mainView")
    public View getMainView() throws IOException {
        return loadView("fxml/main.fxml");
    }

    @Bean
    public MainController getMainController() throws IOException {
        return (MainController) getMainView().getController();
    }

    @Bean
    public Step1Controller getStep1Controller() throws IOException {
        return getMainController().getStep1Controller();
    }

   ...
}

person sinedsem    schedule 08.01.2016    source источник


Ответы (1)


Все spring bean-компоненты по умолчанию являются одноэлементными. Поэтому, если вы не находитесь в группе @Configuration, просто ответьте ДА.

ВНИМАНИЕ: В вашей ситуации, если вы вызываете getMainView более одного раза при создании других bean-компонентов, что происходит в @Configuration, он будет вызываться несколько раз, но только во время создания.

Кроме того, я рекомендую вам прочитать этот вопрос.

person Sercan Ozdemir    schedule 08.01.2016
comment
Ну на самом деле нет.... @Configuration - это специальные бобы и обрабатываются особым образом. Таким образом, хотя метод очевидно вызывается несколько раз, возвращается один и тот же экземпляр компонента. Класс конфигурации на самом деле проксируется/расширяется cglib и анализируется с помощью asm. - person M. Deinum; 08.01.2016
comment
Спасибо за разъяснение, тем не менее я указал на это в своем ответе. @M.Deinum M.Deinum Я добавил в него ключевое слово ОСТОРОЖНО, чтобы сделать его более читабельным. - person Sercan Ozdemir; 08.01.2016