2010-12-15 2 views
24
ApplicationContext ctx = new ClassPathXmlApplicationContext(
    "com/springinaction/springidol/spring-idol.xml"); 
Performer performer = (Performer) ctx.getBean("duke"); 
performer.perform(); 

В приведенном выше примере, когда создаются бобы, когда создается ApplicationContext или когда вызывается getBean()?, когда экземпляр с пружинной основой

ответ

30

Предполагая, что компонент является одиночным, и не настроен для ленивой инициализации, то он создается при запуске контекста. getBean() просто рыбы.

Lazy-init beans будет инициализироваться только при первой ссылке, но это не значение по умолчанию. Скопированные бобы (например, область с прототипом) также создаются только при первой ссылке.

+0

Если используется BeanFactory, бобы лениво загружаются? – 2010-12-15 20:00:18

+1

@java_geek: Well `BeanFactory` - это просто интерфейс, зависит от того, какую реализацию вы используете, но, как правило, да, то же самое выполняется для большинства (если не всех) реализаций BeanFactory. – skaffman 2010-12-15 20:01:36

11

По весне documentation,

поведение по умолчанию для реализаций ApplicationContext является жадностью предварительно Instantiate все одноэлементные бобы при запуске.

Кроме того, вы можете установить их для загрузки лениво.

9

Для справки см

Вот краткое описание того, когда создаются бобы:

  • одноплодный боб (который по умолчанию scope), который не имеет свойства lazy-init для true (по умолчанию f alse) создается при создании контекста приложения
  • Один элемент, который имеет свойство lazy-init, установленное в true, создается при его первом запросе
  • Боб в любой другой области создается, когда он первый (для этой области).
1
  1. По умолчанию все бобы одиночек, поэтому всякий раз, когда контекст приложения будет создаваться, все они предварительно загружены. Если, в частности, любой одноэлементный компонент имеет атрибут lazy-init = "true", он будет лениво загружен, т. Е. Будет создан, когда метод getBean вызывается в первый раз.

  2. Для других областей, бобы будут созданы при каждом запросе.

Смежные вопросы