В весеннем контексте инициализация и создание экземпляра одинаковы?

На языке программирования String str = new String(); // создание экземпляра str = "hello"; // инициализация

Теперь в Spring есть концепция ленивой инициализации. Означает ли это, что объект лениво создается или лениво инициализируется?

Или атрибут имени lazy-init или аннотация @lazy вводят в заблуждение, поскольку на самом деле он лениво создает экземпляры?

P.S. Насколько я понимаю, начиная с версии 4.3 @lazy можно использовать как для ленивой инициализации, так и для ленивого разрешения зависимостей.


person Sara    schedule 13.12.2018    source источник
comment
создание экземпляра является частью процесса инициализации bean-компонента. Это первый шаг перед внедрением зависимостей и выполнением инициализирующих обратных вызовов (@PostConstruct и InitializingBean и несколько поддерживающих интерфейсов).   -  person M. Deinum    schedule 13.12.2018


Ответы (2)


Что касается вашего примера

String str = new String();
str = "hello";

Включает как инстанцирование, так и инициализацию. Первая строка создает экземпляр String и инициализирует его пустой строкой, что означает, что если вы сделаете System.out.println, вы увидите пустое, а не null.

Вторая строка создает константу String в пуле строк и инициализирует str этим значением.

Что касается вашего вопроса о Spring Lazy Initialization, Spring Context использует отложенную инициализацию для ускорения запуска. В Spring Bean in инициализируется только тогда, когда он впервые запрашивается из контекста Spring. Помните, что инициализация всегда будет происходить после инстанцирования.

person shazin    schedule 13.12.2018
comment
Итак, когда мы говорим ленивые синглтоны или прототипы, то на самом деле это означает, что эти объекты создаются при создании контекста, но инициализируются только тогда, когда на них действительно ссылаются? - person Sara; 13.12.2018

Согласно этому (документация Spring), @Lazy включает отсрочку как создания экземпляра, так и инициализации bean-компонента:

По умолчанию реализации ApplicationContext с готовностью создают и настраивают все singleton bean-компоненты как часть процесса инициализации. Как правило, такая предварительная реализация желательна, поскольку ошибки в конфигурации или окружающей среде обнаруживаются немедленно, а не через несколько часов или даже дней. Когда такое поведение нежелательно, вы можете предотвратить предварительную инициализацию одноэлементного компонента, пометив определение компонента как отложенно-инициализированное. Компонент с ленивой инициализацией сообщает контейнеру IoC о создании экземпляра компонента при первом запросе, а не при запуске.

person Juan    schedule 13.12.2018