Когда используется spring bean
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"com/springinaction/springidol/spring-idol.xml");
Performer performer = (Performer) ctx.getBean("duke");
performer.perform();
В приведенном выше примере, когда создаются beans, когда создается ApplicationContext или когда вызывается getBean()?
Ответы
Ответ 1
Предполагая, что bean является одноэлементным и не настроен для ленивой инициализации, он создается при запуске контекста. getBean()
просто выдает его.
Lazy-init beans будет инициализироваться только при первом обращении, но это не значение по умолчанию. Области beans (например, область с прототипом) также создаются только при первом упоминании.
Ответ 2
Согласно Spring документации,
Поведение по умолчанию для реализаций ApplicationContext заключается в том, чтобы с нетерпением предварительно создать все синглтон beans при запуске.
Кроме того, вы можете установить их для загрузки лениво.
Ответ 3
Для справки см.
Здесь приводится краткое описание того, когда beans:
- Синтаксис bean (который является областью по умолчанию), который не имеет свойства lazy-init, установленного в true (по умолчанию false), создается при создании контекста приложения.
- Синтаксис bean, который имеет свойство lazy-init, установленное в true, создается при первом запросе
- A bean, установленный в любой другой области, создается при первом запросе (для этой области).
Ответ 4
-
По умолчанию все beans являются одиночными, поэтому всякий раз, когда создается контекст приложения, все они предварительно загружаются. Если, в частности, любой singleton bean имеет атрибут lazy-init = "true", он будет лениво загружен, т.е. Будет создан, когда метод getBean вызывается в первый раз.
-
В других областях beans будет создаваться при каждом запросе.
Ответ 5
По умолчанию он создается при запуске контекста, но порядок зависит от зависимостей.
Если у нас есть следующие классы:
@Component
public class A{
}
@Component
public class B{
@Autowired
A a;
}
Класс A будет создан до класса B, потому что класс B зависит от класса A.
Ответ 6
По умолчанию Spring ApplicationContext с готовностью создает и инициализирует все "одноэлементные" bean-компоненты во время самого запуска приложения. ApplicationContext делает компонент доступным в BeanFactory. getBean() возвращает экземпляр компонента.