什么时候实例化一个spring bean

jav*_*eek 27 java spring

ApplicationContext ctx = new ClassPathXmlApplicationContext(
    "com/springinaction/springidol/spring-idol.xml");
Performer performer = (Performer) ctx.getBean("duke");
performer.perform();
Run Code Online (Sandbox Code Playgroud)

在上面,bean何时被实例化,何时创建ApplicationContext或何时调用getBean()?

ska*_*man 37

假设bean是单例,并且没有配置为延迟初始化,那么它是在启动上下文时创建的. getBean()只是钓了它.

Lazy-init bean仅在首次引用时初始化,但这不是默认值.仅在首次引用时才会创建范围内的bean(例如原型范围).

  • @java_geek:BeanFactory只是一个接口,它取决于您使用哪种实现,但是通常是的,大多数(如果不是全部)BeanFactory都适用。 (2认同)

vst*_*nov 14

根据Spring 文档,

ApplicationContext实现的默认行为是在启动时急切地预先实例化所有单例bean.

此外,您可以将它们设置为懒惰加载.

  • @java_geek:单身人士*是正常的.他们是默认的.你有什么不正常的? (2认同)

小智 10

供参考,请参阅

以下是创建bean时的简要说明:

  • 创建应用程序上下文时,将构造一个没有将lazy-init属性设置为true(默认为false)的单例bean(默认作用域)
  • 确实将lazy-init属性设置为true的单例bean在首次请求时构造
  • 首次请求时(在该范围内)创建任何其他范围内的bean集.