Spring何时创建注入对象的实例

Eag*_*ner 8 java spring dependency-injection

Spring执行DI并创建对象,以便您的程序不必担心创建对象.但这里的问题是何时创建了一个注入对象的实例.是在主程序使用实例时还是在创建主程序实例时.

ska*_*man 13

上下文启动时,上下文中的所有bean都会被实例化,注入和初始化.到从上下文中检索第一个bean时,所有bean都可以使用了.

有两件事可以防止bean在上下文启动时被初始化:

  • bean 使用该属性配置了不同范围(例如prototype,requestsession)的beanscope="xyz"
  • bean已被标记lazy-init="true",在这种情况下,它只会在明确要求时被实例化,或者它是否需要作为其他bean的依赖项.

  • 你是对的!不会立即创建非单例bean.+1 (3认同)

Ste*_*n C 5

在评论中,OP写道:

因此,程序员需要决定是否需要延迟初始化或初始化bean.这可能是非常主观的,但是你可以让我知道在这种情况下所遵循的任何最佳实践.

是的,由程序员(或系统集成商)来决定.

决定没有任何"最佳实践"规则.想一想:

  • 如果在将始终需要实例化时将bean声明为懒惰初始化,则可能会使启动过程变慢.

  • 如果在不总是需要时将bean声明为急切初始化,则会使启动过程变慢,并可能使用更多内存.在最坏的情况下,创建不必要的bean甚至可能导致启动失败.

简而言之,您需要了解您的应用程序.