Spring делает DI и создает объекты, чтобы ваша программа не беспокоилась о создании объектов. Но вопрос здесь в том, когда создается экземпляр инжектируемого объекта. Это когда основная программа использует экземпляр или в то время создается экземпляр основной программы.Когда Spring создает экземпляры объектов, которые вводятся
ответ
Все компоненты в контексте создаются, инъецируются и инициализируются при запуске контекста. К тому времени, когда первый компонент был извлечен из контекста, все бобы готовы к использованию.
Есть две вещи, которые могут помешать боб быть инициализированы в контексте запуска:
- боба имеет боба сконфигурирован с different scope (такие, как
prototype
,request
илиsession
), используяscope="xyz"
атрибут - Боб был отмечен
lazy-init="true"
, и в этом случае он будет создан только при его явном запросе, или если это требуется как зависимость от другого компонента.
По умолчанию реализации ApplicationContext охотно создавать и настраивать все одноэлементные бобы как часть процесса инициализации. Как правило, это предварительное создание желательно, потому что ошибки в конфигурации или окружающей среде обнаруживаются немедленно, в отличие от часов или даже дней позже. Когда это поведение нежелательно, вы можете предотвратить предварительное создание одноэлементного компонента, указав определение компонента как lazy-initialized. Lazy-initialized bean указывает контейнеру IoC создать экземпляр компонента, когда он сначала запрашивается, а не при запуске.
В комментарии, ОП пишет:
Так что до программиста, чтобы решить, нужно ли боб быть лениво инициализирован или инициализирован заранее. Это может быть очень субъективным, но не могли бы вы сообщить мне о каких-либо передовых методах, применяемых в подобных ситуациях.
Да, это зависит от программиста (или системного интегратора).
На самом деле нет правил «лучшей практики» для принятия решения. Подумайте об этом так:
Если вы объявляете боб, как лениво инициализирована, когда он всегда будет необходимо создать экземпляр класса, вы, возможно, сделать процесс запуска медленнее.
Если вы объявляете bean-компонент как нетерпеливо инициализированный, когда это не всегда необходимо, вы будете замедлять процесс запуска и, возможно, использовать больше памяти. В худшем случае создание ненужного компонента может даже привести к сбою запуска.
Одним словом, вы должны понимать свое применение.
+1 оцените совет: «Короче, вам нужно понять ваше заявление». – asgs
- 1. Spring.NET Зависимости, которые не вводятся
- 2. Как получить экземпляры внутренних объектов Spring
- 3. Snakemake: зависимости, которые не вводятся
- 4. Autoscaling неправильно создает экземпляры
- 5. Что создает рекурсивные экземпляры?
- 6. verilog создает экземпляры модулей
- 7. Mockito создает разные экземпляры?
- 8. Остальные данные, которые вводятся в текстовом поле
- 9. Сохранение строк, которые вводятся с использованием пробелов
- 10. Аннотированные бобы, которые не вводятся для службы JAX-RS CXF
- 11. Получить экземпляры объектов, которые не находятся на первом кадре
- 12. Создает ли setTimeout экземпляры функций?
- 13. Создает ли LoadLibrary отдельные экземпляры?
- 14. Spring MVC - форма, генерирующая новые экземпляры объектов модели
- 15. Глобальные экземпляры объектов
- 16. C# экземпляры пользовательских объектов
- 17. AS3 создает новые экземпляры из чертежей
- 18. Increment значение, когда новые кортежи вводятся
- 19. Узел модулей, которые создают экземпляры?
- 20. MvvmCross: Does ShowViewModel всегда создает новые экземпляры?
- 21. экземпляры объектов инициализации Java, содержащих массив объектов
- 22. IronPython и экземпляры COM-объектов
- 23. PowerShell: как PowerShell создает экземпляры классов C#
- 24. Зависимости, которые не вводятся должным образом mvc 5, owin, unity
- 25. Как найти все экземпляры объектов?
- 26. как я могу получить данные, которые вводятся javascript в блестящем?
- 27. Как импортировать экземпляры объектов в данные Core?
- 28. Создает ли StandardWrapperValve новые экземпляры сервлетов?
- 29. Magento layout XML не создает экземпляры блоков
- 30. Java создает экземпляры классов на лету
Вы правы! Неадминистративный компонент не будет создан сразу. +1 – nanda
Спасибо, скаффман, который разъясняет мои сомнения. Поэтому программист должен решить, должен ли bean быть лениво инициализирован или инициализирован заранее. Это может быть очень субъективно, но не могли бы вы сообщить мне о каких-либо передовых методах, применяемых в подобных ситуациях. –
Это совершенно субъективно, да, но тогда и остальная часть программного обеспечения. Это ничем не отличается. Но ваша позиция по умолчанию должна быть не-ленивой и по умолчанию. Делайте только фасоль, если у вас есть веская причина. – skaffman